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

OperatorMeaningExample
=Equals (exact match; case-insensitive on string columns)status=live
!=Not equalstatus!=draft
>Greater thanid>1000
<Less thancreated_at<2026-01-01
>=Greater than or equalstart_date>=2026-01-01
<=Less than or equalend_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 listid=*in*101|102|103

Note: like and not like are 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:

ExpressionMeaning
email!=*contains*testEmail does not contain "test"
last_name!=*beginswith*McLast name does not begin with "Mc"
email!=*endswith*.testEmail 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
searchConditionBehavior
and (default)All search expressions must match
orAt 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 %7C in 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,3 parameter — it bypasses the search pipeline and is faster.
  • Pagination still applies. Search filters the result set, but you still get back at most per-page records (default 20, max 200).

What’s Next