Pollfish Survey Distribution API

Device register, offerwall, and survey rendering.

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/pollfish-survey-distribution-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 email required.

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

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).