Product Release

Search the persona library and compose a group by hand

FishDog adds two new endpoints — `GET /v1/agents/search` for full-library persona search and a manual group-composition API — so customers can hand-curate panels rather than relying on filter-based recruitment alone.

18 February 2026

Feature
The FishDog organisation API Keys management page, showing per-key scopes and the MCP server access section.

Key Takeaways

  • GET /v1/agents/search` returns the full persona library against the standard filter DSL, with pagination and a `recruitable_only` scope.
  • Manual group composition lets you add specific persona IDs to an existing group, with partial-success responses if some adds fail.
  • Useful when the panel you want is hand-picked out of many candidates, or when reusing personas from a previous study.
  • The existing recruitment flows (`POST /v1/research-groups/recruit` and `POST /v1/research-group-requests`) are unchanged. Hand-composition is additive.

Recruitment by filter works for most studies. Sometimes it doesn't — the panel you want is a hand-picked dozen out of three thousand candidates, or a customer asks specifically for "the personas you used last month, plus three more from Texas". Until this week the answer was "we'll do that for you over email". Now it's an API call.

What's new

  • `GET /v1/agents/search` — search the persona library with the same filter DSL the recruitment endpoint uses, plus pagination and a recruitable_only scope. Returns the full agent record including the numeric id, the demographics, and the summary text. Useful as a first pass when you know roughly what you want but not exactly who.

  • Manual group composition. Add personas to an existing group by ID. Partial-success responses tell you which IDs were added and which weren't (and why) rather than failing the whole call. Use it to extend a recruited group, hand-curate from a search, or rebuild a group from a saved list.

How to use it

The search endpoint takes the standard filter parameters (country, age range, gender, parent status, education) plus pagination. The composition endpoint takes a group_uuid and a list of agent_ids to add. Pair the two when you want to recruit by filter, then add a couple of specific personas you've used before.

The original POST /v1/research-groups/recruit and POST /v1/research-group-requests flows are unchanged. Hand-composition is additive, for the cases where filter-based recruitment isn't quite what you need.

Full reference is in the API docs.

---

Until this week the answer was 'we'll do that for you over email'. Now it's an API call.
Pair search with composition when you want to recruit by filter, then add a couple of specific personas you've used before.

Frequently Asked Questions

What does GET /v1/agents/search do?

It returns personas from the full FishDog library matching the filter parameters you supply (country, age range, gender, parent status, education), with pagination and an optional recruitable-only scope. Useful as a first pass when you know roughly what you want but not exactly who.

How is this different from recruitment?

Recruitment assembles a panel for you against your filter criteria. Search lets you browse the library yourself and pick personas by hand. The two are complementary — recruit a base panel by filter, then use search and manual composition to add specific personas.

Can I add personas from a previous study to a new group?

Yes. Save the persona IDs from the previous study and pass them to the manual composition endpoint with the new group UUID. Useful for longitudinal work where you want consistency across studies.

What happens if some persona IDs in my add request are invalid?

The composition endpoint returns a partial-success response listing which IDs were added and which weren't, with reasons. The valid adds go through; the invalid ones don't fail the whole call.

Release Tags

PersonasProduct ReleaseRecruitment

More Releases