Basically agree with @DavidV and @Maxbuzz here. If you want to use the API, you may need a bit of practice with it to know how to pass data (aka events, but ironically about your Events!) to Klaviyo.
The approach that @Maxbuzz mention seems like the most logical approach. You have a code that periodically checks new events (or new users) to see if there’s a match, and it sends an event call to Klaviyo via the API.
This metric will act as your Trigger to a Flow that sends them messages about the event. All the data you pass can then be used in that email Template as event variables (about the Event). Here, your code manages the rules to send events to Klaviyo, and Klaviyo simply sends the emails via the Flow.
Another approach, which can work if you have logical segments of users (e.g. by City, or by “miles around a zip code”), you can create all the Segments ahead of time and make sure you provide the relevant data of their location from your web app into the users’ profile data.
You can create a separate web data feed that contains your Event details for each Segment (e.g. New York City Events, Los Angeles Events, etc) and then use the API to schedule a Campaign to each and every Segment with a predefined Template that has the matching web data feed selected. So people in the New York City Segment, will get the New York City Template (that uses the New York City Web Data Feed) and so on for each logical Segment of your users.
You’ll then want to use the API (Create Campaign and Create Campaign Send Job ) to create these campaigns and schedule them because it could be tedious to setup dozens of Campaigns each week by hand. Have the API schedule each weeks Campaigns.
The first approach is a lot cleaner, but requires you to build the rules within your app. The later approach relies more on Klaviyo builtin Segmentation capabilities which gives you more visibility on what’s happening via the Campaign analytics. Not to mention, it might good to see the performance of each Campaign (for each Segment) to see how they compare.