Searching
This page will help you get started with Swoogo. You'll be up and running in a jiffy!
Most GET collection endpoints in the Swoogo API accept a search query parameter that filters results server-side. This page documents the full operator set, the syntax for combining conditions, and the gotchas to watch for.
Syntax
A search expression has three parts:
<attribute><operator><value>
Example — find events whose name contains "summit":
GET /events?search=name=*contains*summit
You can combine multiple expressions with & (see Combining conditions).
Operators
| Operator | Meaning | Example |
|---|---|---|
= | Equals (exact match; case-insensitive on string columns) | status=live |
!= | Not equal | status!=draft |
> | Greater than | id>1000 |
< | Less than | created_at<2026-01-01 |
>= | Greater than or equal | start_date>=2026-01-01 |
<= | Less than or equal | end_date<=2026-12-31 |
*contains* | Substring match (case-insensitive) | email=*contains*@swoogo.com |
*beginswith* | Starts with (case-insensitive) | last_name=*beginswith*Sm |
*endswith* | Ends with (case-insensitive) | email=*endswith*.edu |
*in* | Matches any value in a pipe-separated list | id=*in*101|102|103 |
Note:
likeandnot likeare not supported. Use*contains*for substring matching. The*…*wrappers are part of the operator literal — they are not wildcards you place around your value.
Negating a string operator
To express "does not contain", "does not begin with", or "does not end with", combine != with the wrapper:
| Expression | Meaning |
|---|---|
email!=*contains*test | Email does not contain "test" |
last_name!=*beginswith*Mc | Last name does not begin with "Mc" |
email!=*endswith*.test | Email does not end with ".test" |
Combining conditions
Join multiple expressions with an ampersand &:
GET /registrants?search=registration_status=confirmed&id>500
By default, conditions are combined with AND (all must match). To match any condition instead, add searchCondition=or:
GET /registrants?search=email=*contains*@acme.com&email=*contains*@globex.com&searchCondition=or
searchCondition | Behavior |
|---|---|
and (default) | All search expressions must match |
or | At least one search expression must match |
Worked examples
Find live events created this year:
GET /events?search=status=live&created_at>=2026-01-01
Find registrants whose email is on either of two domains:
GET /registrants?search=email=*endswith*@acme.com&email=*endswith*@globex.com&searchCondition=or
Find a specific batch of registrants by ID:
GET /registrants?search=id=*in*1001|1002|1003
Exclude cancelled registrations:
GET /registrants?search=registration_status!=cancelled
Caveats
- Case sensitivity. All string comparisons (
=,!=,*contains*,*beginswith*,*endswith*) are case-insensitive. - URL-encoding. Encode
&, spaces, and other reserved characters in values. The pipe (|) used by*in*should be encoded as%7Cin production clients. - One operator per expression. You cannot stack operators (e.g.
>=*contains*). *in*value list. Separate values with|, not commas. Commas are reserved for other parameters.- Fetching by ID list. If you only need to look up records by primary key, prefer the dedicated
ids=1,2,3parameter — it bypasses the search pipeline and is faster. - Pagination still applies. Search filters the result set, but you still get back at most
per-pagerecords (default 20, max 200).
Updated 24 days ago
