MTurk, Prolific, Bakker — completion codes
Online recruitment platforms pay participants on the honour system: the participant hands your platform a string of letters and numbers, your platform looks it up, and if it matches an enrolment the worker gets paid. That string is the completion code. Generate it wrong and you either pay dishonest workers or refuse to pay honest ones — both destroy your reputation on the panel.
Why SciBLIND mints codes server-side
A completion code generated in the participant's browser can be faked. Anyone who reads the client JavaScript can produce a code without completing the study. SciBLIND mints the code server-side, on the final »thank you« page request, and only after the participant's session satisfies the study's completion criteria (all trials submitted, attention checks passed, minimum duration met). The code lands in a completion_codes table keyed by session — the panel can POST-verify it against /api/v1/completion-codes/verify.
Three formats
Fixed code — every participant receives the same string. Easiest for you to paste into the panel configuration. Weakest against cheating because a single leak compromises the entire study.
Per-session code — each participant gets a unique string. You upload a CSV of accepted codes to the panel at study end, or wire the panel's verification webhook. Best protection against code-sharing.
Panel token embedded — the code is a signed JWT containing the panel's participant ID. The panel can verify the code without talking to SciBLIND. Bakker and some MTurk integrations use this flavour.
PayoutMode configuration
SciBLIND exposes a PayoutMode enum on every study:
PANEL_FIXED— one completion code for the whole study.PANEL_PER_SESSION— a fresh code per completed session.PANEL_JWT— a signed JWT including the panel participant ID.SELF_HOSTED— you bring your own code system; SciBLIND passes thecc=query string through unchanged.
Wiring the panels
MTurk. Set externalSubmit on the HIT's completion URL to https://blind.scaientist.eu/panel/mturk/complete?assignmentId={ASSIGNMENT_ID}. SciBLIND redirects to the MTurk submit URL after minting the code.
Prolific. Paste the per-session completion URL into the Prolific study settings, including ?cc={SCIBLIND_CODE} so Prolific's verification picks up the code from the query string.
Bakker. Same redirect pattern as Prolific; Bakker's webhook verifies against /api/v1/completion-codes/verify by default.
What to do if a participant skips to the thank-you page
Don't mint the code. SciBLIND's completion gate checks that the session has a SUBMITTED terminal state and that every mandatory block has a response. A participant who bypasses the gate hits a warning page with a support email, not a code.
Exporting for payment reconciliation
Every study export includes a panel_completion_code column and a panel_participant_id column. Reconciling payment is a spreadsheet join between the SciBLIND export and the panel's completed-workers list.