Prolific · AsyncAPI Specification

Prolific Webhooks

Version

View Spec View on GitHub CompanyAi/MlHuman DataResearchParticipant RecruitmentSurveysHuman FeedbackRLHFData CollectionAPIAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-07-20'
method: searched
source: https://docs.prolific.com/api-reference/webhooks.md
spec_type: Webhooks
summary: >-
  Prolific offers an outbound webhook system: researchers create subscriptions to event types and
  receive HTTP POST callbacks. No AsyncAPI document is published; this captures the webhook surface.
subscription:
  model: >-
    Create a secret, then create a subscription to one or more event types with a callback URL.
    Subscriptions are confirmed via a challenge before events flow.
  operations:
    list_event_types: openapi/prolific-openapi-original.yml#get-event-types      # GET /api/v1/hooks/event-types/
    create_secret: openapi/prolific-openapi-original.yml#create-secret            # POST /api/v1/hooks/secrets/
    create_subscription: openapi/prolific-openapi-original.yml#create-subscription # POST /api/v1/hooks/subscriptions/
    confirm_subscription: openapi/prolific-openapi-original.yml#confirm-subscription
    get_events: openapi/prolific-openapi-original.yml#get-events                  # GET /api/v1/hooks/subscriptions/{id}/events/
event_types:
  discovery: GET /api/v1/hooks/event-types/ returns the up-to-date list (runtime source of truth)
  naming: noun.verb pattern
  documented_examples:
  - study.status.change   # fires when a study transitions status (e.g. published, completed)
  note: >-
    The full event-type list is served at runtime and not enumerated in docs; submission- and
    study-scoped events are the primary surface. Not fabricating the full list here.
delivery:
  transport: HTTPS POST to subscriber callback URL
  guarantee: at-least-once (retries on failure)
  ordering: X-Timestamp / X-Prolific-Request-Timestamp header conveys event time for ordering
  idempotency: X-Event-ID header — dedupe on it to handle retries idempotently
  retry: exponential retry; persistent failures disable the subscription
  docs:
  - https://docs.prolific.com/api-reference/webhooks/event-delivery-and-retry-logic
  - https://docs.prolific.com/api-reference/webhooks/persistent-failures-and-disabling-logic
security:
  verification: HMAC-SHA256 over (X-Prolific-Request-Timestamp + raw body), base64-encoded
  signature_header: X-Prolific-Request-Signature
  timestamp_header: X-Prolific-Request-Timestamp
  comparison: constant-time
  docs: https://docs.prolific.com/api-reference/webhooks/verifying