Skip to main content
Some partners run their own screening step — proprietary questions, an internal qualification model, or compliance checks that have to happen on their own platform. External screeners let you do that without losing Respondent’s recruitment funnel: participants qualify on the Respondent screener first, then complete your screener on your site, and only then does their application present to the researcher as submitted and invitable. This page covers:
  • How the flow works end to end, and the two response statuses it adds
  • Setting up a project: the screener link and the declared question catalog
  • Receiving participants (the respondent_* correlation parameters)
  • Posting answers back, corrections, and how the qualification verdict is derived
  • The return contract — the two rules your redirect must follow
  • Webhooks and status handling
External screeners are enabled per organization. Contact Respondent to have the flow turned on for your organization. Until then you can set the fields below on a draft, but publishing that draft is rejected with a 400 — see Publishing preconditions.

How the flow works

  1. A participant applies to your project and completes the Respondent screener as usual.
  2. If the answers to the Respondent screener qualifies them for the study, the participant is shown a handoff page explaining they’ll finish the screener on your platform. When they continue, they arrive at your externalScreenerLink with correlation parameters appended.
  3. The participant completes your screener on your site.
  4. You post their answers back with Post external screener answers, then redirect them to the Respondent page they came from. You must ensure all answers are posted before the user can be redirected back.
  5. Once the answers cover your declared question catalog (or you signal early completion due to skip logic, disqualification etc.), the response moves to PENDING — the same status a classic application reaches when it is submitted — provided nothing else is outstanding on our side. The participant may be required to complete identity verification steps on the Respondent platform, so the response stays EXTERNAL_SCREENER_IN_PROGRESS until they complete it, and moves to PENDING on its own afterwards. Do not treat a response that has not yet reached PENDING as an error. From PENDING it behaves like any classic application: one that passed (qualified: true) and is not held is visible to the researcher, counts toward the project’s applications, and can be invited — manually or by auto-invite. A failed verdict stays PENDING too but is never auto-invited, and a held response is not visible to the researcher until its hold resolves.
One status carries the flow, and it behaves like a status you already know:
Reaching PENDING does not mean the participant passed your screener either — as with a classic submission, the pass/fail verdict lives in the qualified flag, so a participant who fails your screener also settles on PENDING, with qualified: false.

Setting up a project

An external-screener project declares two things:
  • externalScreenerLink — the URL of your screener, as an absolute https:// URL (http:// and bare hostnames are rejected). Participants are sent here with correlation parameters appended, so the URL may include its own query string.
  • externalQuestions — the declared catalog of your screener’s questions. Answer rows you post back are validated against these questionIds, and the catalog defines when a response counts as complete.
You can set both on Create a project, or create the project with just the link and declare the catalog later with Replace external screener questions. Neither has to exist before you publish: externalScreenerLink can be set or changed on a live project with Update a project, and the catalog endpoint works on live projects too — see Changing the screener after publish.
  • The endpoint replaces the whole catalog (like the screener questions bulk endpoint). Send the full list every time.
  • questionId is your stable identifier — answer rows reference it, and completion is counted against it. Duplicate questionIds are rejected.
  • questionType is one of RADIO, CHECKBOX, TEXT, NUMBER, or OTHER. Use OTHER for anything not modelled — the text keeps the answers legible to researchers either way.
  • Don’t change questionIds while a project is live: answers already posted are keyed by them, and completion counting depends on the declared set.

Publishing preconditions

Publish a project checks that the external screener config is valid before an external-screener project can go live: The pair must be complete.
A project must have both externalQuestions and an externalScreenerLink configured.
A draft may hold just the link (or just the catalog) while you’re setting up, but publishing rejects a half-configured pair with a 400.
At least 2 questions in total.
Every project needs at least 2 screener questions to publish. On an external-screener project the two catalogs count together: two Respondent screener questions, two external questions, or one of each all satisfy it. A project with a single question across both is rejected with a 400 (Project must have at least 2 screener questions).
The same total applies once the project is live: replacing the external catalog with fewer questions, or removing Respondent screener questions, is rejected if it would leave the published project below 2.

Changing the screener after publish

Your screener does not have to exist when the project goes live. On a published project (projectStatus: PAID):
  • Set or change externalScreenerLink with Update a project — it is one of the fields accepted on a live project. While externalQuestions are declared the link is required, so a null is rejected with a 400; send the new URL instead.
  • Set or replace externalQuestions with Replace external screener questions — the same replace-all endpoint you use on a draft.
The flow switches on for new applicants as soon as both are configured (and the feature is enabled for your organization). What that means for participants already in the funnel:
  • Participants who applied before both were configured went through the classic flow and are already PENDING — they never saw your screener, and they stay invitable. If you want their answers too, screen them on your side after inviting them.
  • Participants who were already handed off to your screener keep the URL they were sent to when they resume from the Respondent apply page, so a partner session they started is not broken by a link change. New applicants get the new link.
  • Removing the link is only possible while no catalog is declared. Answers you already posted stay on their responses either way.

Receiving participants

When a qualified participant continues to your screener, Respondent appends these query parameters to your externalScreenerLink: Persist at least respondent_screener_response_id and respondent_project_id for the session — you need both to post answers and to send the participant back.
Ask participants only your screener questions. Never ask for their Respondent password, a sign-in code, or contact details such as email or phone — Respondent tells participants to close the tab and report any site that does.

Posting answers back

Post the participant’s answers — and your per-question verdicts — with Post external screener answers:
How it behaves:
  • Rows upsert idempotently per questionId. Re-sending a row replaces the earlier one, so a correction is just another POST — including flipping an earlier qualifies verdict. Respondent re-derives the response’s state from the stored rows on every write.
  • Each row must reference a declared questionId (undeclared ids are rejected) and must carry content: at least one of answerValues (a non-empty array — multi-select friendly) or answerText (a non-empty string).
  • Completion: your side of the screener is complete once the stored rows cover every declared question. The response then moves to PENDING, unless a Respondent verification step is still outstanding — see step 5. If participants may legitimately skip questions on your side, send "complete": true alongside the answers to settle the response early — you can post in as many batches as you like before that.
  • The verdict is derived: the response ends up qualified only if every stored row has qualifies: true. A failed verdict settles the response on PENDING with qualified: false — visible to the researcher, but excluded from qualified counts and auto-invite.
  • You can keep posting corrections while the response is in EXTERNAL_SCREENER_IN_PROGRESS or PENDING. Once the participant has been invited, the response is closed to answer writes.
  • For an overall disqualification decision that isn’t tied to answer rows, use Qualify participant with qualifyStatus: false — same as on classic projects. Note that a later answers re-post re-derives the verdict from the rows, which can undo a manual flip.

The return contract

Two rules, both load-bearing:
1

Post the answers before you redirect

Send the answers request and wait for the response before sending the participant back. If the participant lands back on Respondent before the answers arrive, they see a waiting state instead of a submitted application — the page recovers on its own once your POST lands, but posting first makes the handoff seamless.
2

Redirect to the apply page — never the completion URL

Send the participant back to the project’s apply page:
Do not redirect through the project’s completionUrl. The completion URL marks the study task complete — on an unmoderated study or survey it starts the review-then-autopay clock. A screener is not the study; routing screener traffic through it would pay participants for applying.
Respondent never auto-forwards the participant in either direction: the handoff to your screener and the return are both explicit pages, so a participant who navigates back early can always resume from where they left off.

Webhooks and statuses

If you use webhooks, the moment your answers settle the response — EXTERNAL_SCREENER_IN_PROGRESSPENDING — is the application’s submission moment, so it arrives as a SCREENER_RESPONSES.CREATED event, exactly as a classic application’s submission does. There is no separate external-screener submission event to subscribe to. There is no webhook for the handoff into your screener. You learn a participant has arrived when they land on your externalScreenerLink with the respondent_* correlation parameters — the same moment a webhook would tell you, without the round trip. A few status behaviors worth knowing:
  • A PENDING response may still be held — in an identity-verification or review hold, it is not yet visible to the researcher. The status does not change when the hold is released. Your answer posts are accepted throughout.
  • Cancel invite reverts to PENDING — the same as on a classic project. The participant’s answers are already stored, so withdrawing an invitation does not send them through your screener again.
  • List screener responses accepts EXTERNAL_SCREENER_IN_PROGRESS in its statuses filter.

Quick reference

Last modified on September 10, 2026