Natural-language event search
Search your received events by describing what you want in plain English — across both event metadata and the contents of the JSON payload.
How it works
Your English query is compiled into a structured query, which is then executed in two layers:
- Metadata predicates — source, time range, and delivery status — become a Postgres
WHEREclause, so they run in the database. - Payload-content predicates are evaluated in-memory against each event's
bodyRaw, since bodies are stored as text rather than JSONB. The scan is bounded by a cap, and results use resumable cursor pagination — pass the returned cursor back to continue scanning beyond the cap.
Where to use it
One engine powers all three entry points:
- The dashboard
/eventssearch box. POST /api/v1/events/searchin the REST API.- The
search_eventsMCP tool.
Example
curl -X POST https://odyhook.dev/api/v1/events/search \
-H "Authorization: Bearer ody_…" \
-H "content-type: application/json" \
--data '{"q":"events from the last day where the delivery failed"}'The response includes the compiled query alongside the matching events (newest first), so you can see exactly how your English was interpreted.