Until this week, recruiting a research group meant translating your research question into a JSON object. Country, age range, gender, parent or not, education band — each filter spelled out, each one a chance to typo your way to zero results.
That step is now optional. Send a sentence to the new natural-language recruitment endpoint and Ditto does the translation. The pipeline parses the request, screens candidates with an LLM-based interview pass, prunes anyone who doesn't fit, and returns a recruited group of the size you asked for. Up to five rounds of refinement run automatically.
What's new
Plain-English requests.
POSTa freeform description to/v1/research-group-requests. The endpoint returns arequest_idyou can poll.Live progress updates. Status responses now include the current phase (parsing, screening, pruning, recruiting) plus LLM-generated progress messages explaining what the system is doing.
Automated screening + pruning. Each candidate is interviewed against your description; anyone who doesn't match is removed. Up to five rounds before the system gives up and returns what it has.
Filter guardrails. Requests that ask for unsupported filters (income, ethnicity, employment status — see the API docs) are rejected with a clear error rather than silently returning zero agents.
How to use it
The endpoint takes one required field — a description. Optional fields let you pin the group size or geography. Polling /v1/research-group-requests/{request_id} returns the full status payload, including the agent IDs once recruitment finishes.
The original explicit-filters endpoint (POST /v1/research-groups/recruit) hasn't moved. Use whichever fits the call site.
The full reference is in the API docs.
---


