Searching the workflow list matches a literal substring of the name
The term is text to find, not a pattern to interpret, so a name containing a percent sign is found by searching for a percent sign.
The rule
- A list request may carry a search term, which filters the list to workflows whose name contains it, compared without regard to case and matched anywhere in the name.
- The term is matched literally and carries no pattern syntax:
%and_match themselves and nothing else. - The same filter applies to the count, so the reported total describes the filtered set rather than the collection (API-6).
- A term that matches nothing answers an empty page with a coherent pagination block, not a refusal and not a not-found.
- A term of
0is an ordinary search term. - A search parameter that is not a single scalar value is refused with
400.
What it means
A search term is text to find, never a pattern to interpret. That matters
because the family of characters a pattern language treats specially —
% and _, in the pattern syntax this rule explicitly rules out — are
ordinary characters in a workflow name, and a caller who names a workflow
100% coverage has to be able to find it by searching for the percent sign
literally, not by learning to escape it first.
A term that matches nothing is not a refusal and not a not-found: it is an ordinary page, empty, with a pagination block that still reports correctly on zero rows. And the filter and the count agree with each other — the reported total describes the filtered set the caller is looking at, not the whole collection behind it (API-6).
Example
GET /api/flowdrop/workflows?search=INVOICE
{"success": true, "data": [ … ], "pagination": {"total": 2, "limit": 50, "offset": 0, "has_more": false}}GET /api/flowdrop/workflows?search=%25
{"success": true, "data": [ … ], "pagination": {"total": 1, "limit": 50, "offset": 0, "has_more": false}}GET /api/flowdrop/workflows?search=nothing+here
{"success": true, "data": [], "pagination": {"total": 0, "limit": 50, "offset": 0, "has_more": false}}A wildcard reading of _nvoice would match a name containing Invoice; a
literal one, which is what this rule requires, matches nothing — the same
empty, coherent answer as any other term nothing contains.
Why
Recorded under OPEN-19.