brava_activity_breakdown
ChatGPTBreaks activity down along a chosen dimension: visits, revenue, orders, average order value and rewards redeemed, grouped by 'day'/'week'/'month' for a trend, 'hour_of_day'/'day_of_week' for busy periods and staffing, 'location' to compare outlets, or 'card' when the business runs more than one programme. Up to 3 dimensions per call, each returned as its own table over the same window, so the totals match across them. This answers a specific question about WHEN or WHERE activity happens; the overall picture of how the business is performing lives in brava_business_overview, which already includes the headline trend. Buckets always sum to the reported totals — visits with no location recorded appear as an 'Unassigned' bucket rather than being dropped. Bounded to 120 buckets per dimension; check truncated.
brava_business_overview
ChatGPTHow your business is doing overall, in one call: profile and locations, loyalty cards with plain-language rules, the customer base split by how recently people visited, the last 90 days of visits, revenue, average order value and rewards against the prior 90 days, a 13-week visit and revenue trend, recent announcements with the latest one's response, and how far back the data goes. It already carries the headline trend and the period-on-period comparison, so a broad question about how the business is performing is fully answered from this one result.
brava_data_definitions
ChatGPTThe glossary for Brava's data: what counts as a visit, how revenue is recorded and why it is a floor rather than an exact total, what each recency bucket means, how the card types work, and how to reason about whether an announcement changed anything. Static reference text, not a query about this business. Call it when a number needs a precise definition before you interpret it.
brava_draft_announcement
ChatGPTTurn proposed announcements into prefilled links to Brava's announcement composer, with each message — and optionally an audience preset and loyalty card — already filled in. It is the only route by which a proposed message becomes something a person can actually send: wording that exists only as text in a reply cannot be sent from there, and would have to be retyped into Brava by hand. Takes a LIST: one entry per message, up to 8 in a single call, so a set of messages aimed at different audiences is one call rather than one call each. It returns URLs and sends nothing: the result carries sent: false, and an announcement only goes out when a person opens a link in Brava, reviews the audience and wording, and presses Send. Message rules match the composer: {first_name}, {current_stamps} and {stamps_to_reward} are the only tokens available, and each message's worst-case rendered length must be 256 characters or fewer. One rejected entry rejects the whole call and names its index, so nothing half-succeeds. The audience presets are stamp-card cohorts; on a non-stamp card the preset is dropped and the message is kept.
brava_list_announcements
ChatGPTAnnouncements already sent to a group of customers (Brava calls these campaigns internally), with their audience, delivery status, and how the recipients behaved in the 14 days after the send versus the 14 days before. Use it to answer 'did that message work'. The comparison is directional, not causal — there is no control group — and after_window_complete tells you whether the +14d window has actually elapsed yet. 1:1 personal messages are not announcements and are reported only as a count.
brava_list_customers
ChatGPTOne page of individual customers with lifetime visits and spend, filtered by how recently they last visited and sorted as asked. Use it to name specific people — 'who are the regulars', 'who is slipping away', 'who has never come back after joining'. Filter by name to look up a specific customer. Phone and email are never available; birthday (MM-DD only) is returned only when include_birthdays is explicitly true. Max 50 per page; check total and truncated and page with offset rather than assuming the first page is everyone. Person-level records are unavailable during administrator cross-business access.
brava_report_missing_capability
ChatGPTRecords an unmet Brava capability for the product team as a durable, structured feature request: what functionality the person expected, the business outcome they wanted, and the gap in the currently available Brava tools. It covers missing functionality within Brava's product scope, rather than unrelated requests, permission problems, invalid input, safety refusals, or temporary errors. Repeated identical requests from the same account share a stable request ID and increase its occurrence count. The result confirms roadmap consideration and follow-up intent, changes only Brava's product-feedback records, and does not perform the requested action.