You POST date_from, date_to, and a required, non-empty event_types list to /api/v3/mundane/events/search.
Three optional filters narrow specific families: bodies constrains sign_ingress, station, and retrograde_period (default is the seven classical planets), to_signs filters sign_ingress by the sign entered, and cardinal_points narrows cardinal_ingress to specific seasons.
lunation_phases controls which Moon phases come back, defaulting to New and Full only.
Before any calculation runs, the request is costed: if your window, event types, and bodies would be too expensive to scan, the API refuses it in milliseconds and reports the sample count that triggered the refusal, instead of holding a worker for a multi-second scan that was always going to fail.
Everything that succeeds comes back in one events[] array, sorted ascending by datetime_utc.
One POST, eight families, cost-checked before it runs