Webhooks

Receive real-time event notifications when responses are submitted or surveys change status.

Webhooks push events to your server when something happens in QuestionPunk: a response is started or completed, a survey is published or unpublished, or a response limit is reached. Use webhooks to trigger downstream workflows without polling.

developerwebhooksintegrationsautomation10-15 minutes to configureIntermediateDevelopersProduct teams

Steps

  1. Create a webhook
    Go to Settings > Developer > Webhooks and click + Add Endpoint. Enter a publicly accessible HTTPS URL that will receive POST requests.
  2. Select events
    Choose which events to subscribe to: response.completed, response.started, survey.published, survey.unpublished, survey.response_limit_reached, recruitment.started, recruitment.fulfilled, recruitment.partial, recruitment.failed, panel.submission.approved, panel.submission.rejected, panel.submission.payout_released, or panel.submission.paid. Select all subscribes to these 13; to receive events added later too, subscribe to * through the API.
  3. Verify signatures
    Each delivery carries an X-QP-Signature header with the value sha256=<hex>, an HMAC of the raw request body. Verify it with your webhook secret to confirm the request came from QuestionPunk.
  4. Monitor deliveries
    Settings > Developer > Logs shows delivery history, including HTTP status codes and response times, so you can diagnose failures.

Webhooks let you react to QuestionPunk events in real time. Common use cases include sending Slack notifications when a response is completed, syncing data to a CRM, or triggering analysis pipelines.

Thirteen event types are available across four categories. Response events: response.completed (a respondent finishes the survey) and response.started (a respondent begins). Survey events: survey.published (a survey goes live), survey.unpublished (taken offline or archived), and survey.response_limit_reached (hits its response cap, sent once per limit). Survey events fire whether the change is made in the app or through the API, and are delivered to the survey owner’s webhooks. Recruitment events: recruitment.started, recruitment.fulfilled, recruitment.partial, and recruitment.failed track panel recruitment lifecycle. Panel submission events: panel.submission.approved, panel.submission.rejected, panel.submission.payout_released, and panel.submission.paid track individual participant payouts and approvals.

Webhook secrets are encrypted at rest using AES-256-GCM. Each delivery is signed with SHA-256 HMAC so your server can verify authenticity.

If a delivery fails, check the delivery log in Settings > Developer > Logs for the HTTP status code and response time to diagnose the issue.