add_task_note
ChatGPTAdd a note to a task's activity log, e.g. "the car wash on 5th was closed, went to Lamar".
alias_delete
ChatGPTDelete a vehicle alias by its name
alias_list
ChatGPTList all vehicle aliases saved by the authenticated user. Aliases are short names (e.g. "tesla", "red suv") that map to a specific vehicle ID.
alias_save
ChatGPTSave (upsert) a short alias name pointing to a vehicle. The alias is stored lowercase. The vehicle must belong to the user's licensed fleet.
apply_direct_price_change
ChatGPTSTEP 2 OF 2 — apply a price change that preview_direct_price_change already computed. THIS CHANGES CUSTOMER-FACING PRICES. Only call this after showing the host the preview and receiving explicit approval. Pass the confirmToken from the preview unchanged; it is cryptographically bound to that exact set of changes, so you cannot apply anything the host did not see. If the underlying prices changed since the preview, this fails and you must preview again. Returns prices re-read from the database after writing, so report the "verification" block back to the host as confirmation of what actually changed.
attach_expense_document
ChatGPTFile images the host already sent in this conversation against an EXISTING expense (e.g. "attach that receipt to the Shell expense from Tuesday"). When creating a new expense, pass attachmentIds to create_expense instead — one call is safer than two.
attach_task_files
ChatGPTAttach photos or PDFs the user sent in this chat to an EXISTING task ("add this receipt to the car wash task"). When creating a new task, pass attachmentIds to create_task instead. Report any attachmentErrors to the user; a task holds at most 10 files.
cancel_private_reservation
ChatGPTCancel a private reservation
cancel_task
ChatGPTCancel a task that should not be done. A reason is REQUIRED — if the user did not give one, ask for it before calling. Only the host or whoever created the task can cancel it.
check_vehicle_availability
ChatGPTCheck if a vehicle is available between two dates
complete_reminder
ChatGPTMark a reminder as completed
complete_task
ChatGPTMark a task done, optionally with a short note about what was done.
create_expense
ChatGPTCreate one or more vehicle expenses. For a single expense pass vehicleId and the fields directly. For the SAME expense on several vehicles (e.g. "car wash $22 on every car", "split the $1,900 fleet insurance across the Corollas"), pass appliesTo instead of vehicleId, plus name, category, amount, date: it writes one row per vehicle sharing a bulkGroupId, which update_expense_group and delete_expense_group then act on. For a cost that repeats every month (insurance, a car note, a weekly wash billed monthly), use create_recurring_expense instead: it writes each month on its due date, rather than rows dated in the future. For several past expenses on ONE vehicle (e.g. backfilling the last 6 months of insurance), pass an "entries" array — each entry uses the same fields as a single expense (name, category, amount, date are required per entry). When "entries" is provided, the top-level single-expense fields (name, category, amount, date) are ignored. Returns ids of all created expenses.
create_geofence
ChatGPTSTEP 2 OF 2 — create the geofence that preview_geofence described, after the host has confirmed the location. Pass the confirmToken unchanged; it is cryptographically bound to the exact coordinates that were previewed, so a fence can only ever be created where the host was shown. Creates both the boundary and the rule that arms it.
create_private_reservation
ChatGPTCreate a new private rental reservation from the guest's name and one way to reach them (email or phone). Returns the reservation and an editUrl: give the user that link so they can finish the booking in the RevHost dashboard, where any remaining guest details are entered. Never ask for or accept identity documents, licence numbers or dates of birth in chat.
create_recurring_expense
ChatGPTSet up a cost that REPEATS every month, e.g. "car wash $22 per car on the 15th for 12 months" or "the $717 car note on the RAV4, monthly until July 2032". ONLY when the host says it repeats (every month, monthly, a loan or note with a term, a subscription). A cost paid once is create_expense, however large and whatever its category: "I paid the $1,200 insurance today" is ONE expense, not a recurring one. If it is unclear whether it repeats, ask the host before calling this. A recurring expense belongs to ONE car: pass vehicleIds with one id, or several ids (or allVehicles: true for every active car now) to set the same one up on each car separately, each paying amount a month. Cars added later are not included. Each month is written as an ordinary expense row ON ITS DUE DATE, never ahead of it; if startDate is in the past, the months already due are written now (at most 36). The result carries a summary sentence: tell the host what was set up in those words.
create_reminder
ChatGPTCreate a new vehicle reminder
create_task
ChatGPTCreate a task: work a person or a team must do ("have someone wash the Camry by 3pm", "ask the VA to call the guest"). Not for vehicle maintenance reminders — use create_reminder for those. Call list_task_assignees first when the user names a person or a team. Give assigneeUserId OR assigneeRole, never both; give neither and the task is assigned to the caller. If urgency is high or urgent and no deadline was stated, ask for one; never invent a deadline. The assignee gets a push notification (held until 07:00 overnight unless urgent).
create_vehicle
ChatGPTCreate a new (non-Turo) vehicle
delete_expense
ChatGPTDelete an expense permanently
delete_expense_group
ChatGPTPermanently delete every row of a multi-vehicle expense (the bulkGroupId create_expense returned when given appliesTo). Receipts attached to the rows are deleted too unless keepDocuments is true. To remove one car from the group, use delete_expense on that row instead.
delete_recurring_expense
ChatGPTDelete a recurring expense. The expense rows it already wrote are KEPT by default, because they are what was actually spent; pass deleteRows: true only when the whole thing was a mistake. To stop future payments but keep the record, use update_recurring_expense with action "stop" instead.
expense_stats
ChatGPTGet expense totals and a per-category breakdown for the user's licensed vehicles. Optionally filter by vehicle, start date, and end date.
find_available_vehicles
ChatGPTWhich vehicles are FREE between two dates. Use this for "what can I rent this weekend", "which cars are available", "do I have anything free on Friday" — NOT a loop of check_vehicle_availability, which answers for ONE vehicle and costs one call per car (24 calls on a small fleet, 200 on a large one, and it will run out of steps before it answers). This does the whole comparison in one query. It returns a PAGE of results plus totalAvailable: report the page and say how many more there are rather than listing everything — a host with 200 cars does not want 200 names in a chat reply. Raise limit or ask for page 2 only if the host asks to see more.
get_direct_pricing_calendar
ChatGPTRead DIRECT-BOOKING (private rental) daily prices for a vehicle over a date range — the prices guests pay on the host's own booking site. Returns each date's price, the vehicle's defaultPrice (the fallback used for any date with no specific price), and the host's minimum allowed price. Dates with no specific price fall back to defaultPrice; if defaultPrice is null the vehicle CANNOT be booked and is hidden from the booking site. This is NOT the Turo calendar — use get_pricing_calendar for that.
get_expense
ChatGPTGet a specific expense by ID
get_financial_summary
ChatGPTGet revenue, expenses, and net profit for a date range, with a per-vehicle breakdown. Revenue counts trips that ENDED in the range with status COMPLETED or ACTIVE, at full totalAmount without proration; figures approximate the Financials dashboard, which prorates multi-month/active trips. Use for questions like "what did I make in June?" or "how is the Tesla performing?".
get_guest_profile
ChatGPTGet a guest profile by ID (Turo or private)
get_invoice
ChatGPTGet a specific invoice with line items
get_invoice_stats
ChatGPTGet aggregated invoice statistics (totals, counts by status)
get_location_history
ChatGPTList recorded trips for a vehicle in a date range, with start/end times and distance.
get_pricing_calendar
ChatGPTGet daily prices for a vehicle in a date range
get_private_reservation
ChatGPTGet details of a specific private reservation
get_reminder
ChatGPTGet a specific reminder by ID
get_task
ChatGPTGet one assigned task with its full activity log (who created, assigned, started, noted, finished it).
get_turo_reservation
ChatGPTGet details of a specific Turo reservation (read-only)
get_vehicle
ChatGPTFull record for one vehicle by ID — every field, so call it only when the summary from list_vehicles or vehicle_search is not enough. Deleted vehicles are never returned.
get_vehicle_location
ChatGPTGet a vehicle's last known GPS position, how old the fix is, and whether it is moving right now.
host_knowledge_completeness
ChatGPTWhat is missing from a host's knowledge base, ordered by how much guest messaging each gap would remove. Use this to decide what to ask the host about next.
host_knowledge_get
ChatGPTRead a host's knowledge base: voice and policies, per-location pickup facts, and per-vehicle handoff details. Access and lockbox codes are never returned — you get hasAccessCode / hasLockboxCode instead, because a code is only releasable inside a trip's pickup window.
host_knowledge_set
ChatGPTSet a host's voice, policies and escalation contact. This is a MERGE: fields you omit keep their stored value, so setting the fuel policy cannot erase the toll policy. Send an explicit null to clear a field.
immobilize_vehicle
ChatGPTCut the starter relay so a vehicle cannot be restarted. Refuses while the vehicle is moving. Requires an explicit reason, which is written to the audit log.
list_expenses
ChatGPTList vehicle expenses for the authenticated user. Use startDate/endDate to filter by date range. Only expenses for licensed vehicles are returned.
list_geofences
ChatGPTList the geofences available to this host — their own, plus published shared ones.
list_guests
ChatGPTList all guests (Turo + private) across all your vehicles
list_invoices
ChatGPTList cohost invoices for the authenticated user
list_private_reservations
ChatGPTList private (non-Turo) reservations for the authenticated user. Use startDate/endDate to limit results to a specific time window.
list_recurring_expenses
ChatGPTList the recurring expenses set up for the fleet (car notes, insurance, washes). Each is ONE car's (vehicleId), with its monthly amount, next date, how many payments remain, the remaining commitment, and while on hold the resumeOn date. The same expense set up on several cars appears once per car. Future months are NOT expense rows yet; they exist only here, and are written as expenses on their due dates.
list_reminders
ChatGPTList vehicle reminders for the authenticated user
list_reservations
ChatGPTList ALL reservations (Turo + private) in one call. IMPORTANT: Always use date filters to limit results — there may be thousands of historical reservations. Filter guide: - "upcoming reservations" → startDate=today - "next 7 days" → startDate=today, endDate=7 days from now - "tomorrow's pickups" → pickupFrom=tomorrow 00:00, pickupTo=tomorrow 23:59 - "tomorrow's dropoffs" → dropoffFrom=tomorrow 00:00, dropoffTo=tomorrow 23:59 - "who has my cars right now" → status=ACTIVE Response includes: vehicle info, guest name + phone, delivery/pickup location, dates, cost, and source (turo/private).
list_task_assignees
ChatGPTWho tasks can be assigned to for this host: people (with ids) and roles (host, employee = Ground Team, va = Back office) with how many members each has. Call this BEFORE create_task or update_task whenever the user names a person or a team, and use the id it returns — never guess an id.
list_tasks
ChatGPTList assigned tasks (work handed to a person or a team: the host, the Ground Team, or back office). view: mine (assigned to or started by me), pool (tasks for a role), created (asked for by me), all. Defaults to open and in-progress, overdue first. Each task has dueAtLocal — quote it; do no timezone math.
list_tracker_alerts
ChatGPTList telematics alerts (geofence, tamper, low battery, fault codes) across the fleet or one vehicle.
list_turo_reservations
ChatGPTList Turo reservations (read-only). IMPORTANT: Always use startDate/endDate to limit results — there may be thousands of reservations. For upcoming trips use startDate=today. For active+upcoming use status filters with date range.
list_vehicle_commands
ChatGPTList telematics commands recently issued to a vehicle, and whether each one took effect.
list_vehicles
ChatGPTSummary of the vehicles owned by the authenticated user — id, year, make, model, trim, nickname, plate and Turo status. Deleted vehicles are never returned. Prefer vehicle_search when looking for a particular vehicle; it is much cheaper than listing the fleet. Use get_vehicle for the full record of one vehicle.
location_knowledge_set
ChatGPTSet the pickup facts for one host location — the lot, the row, how to get there from arrivals, and what the Turo listing gets wrong. This is where most "where is the car" messages are answered. MERGE semantics: omitted fields keep their value, null clears.
lock_vehicle
ChatGPTLock a vehicle's doors remotely. Requires a reason, which is written to the audit log.
preview_direct_price_change
ChatGPTSTEP 1 OF 2 — preview a direct-booking price change across one or more vehicles and a date range. WRITES NOTHING. Returns the exact per-date before/after diff plus a confirmToken. You MUST show the host the resulting changes (how many dates, which vehicles, and the before/after prices) and get their explicit approval BEFORE calling apply_direct_price_change with the returned confirmToken. Never apply a change the host has not seen. Modes: "set" writes an absolute price to every matched date (works even on vehicles with no price yet). "adjust_amount" adds/subtracts dollars. "adjust_percent" changes by a percentage, rounded to whole dollars. Both adjust modes compute from the date's existing price, or from defaultPrice when the date has none — so an adjustment moves every date in the range, not only ones already priced. Vehicles with neither are reported in "skipped". Mode "sync_from_turo" copies the host's own Turo calendar into their direct-booking prices for the range and takes no value. It also proposes a default price for any vehicle that lacks one — from the vehicle's Turo default, or the median of the copied days — because without a default the vehicle stays hidden from the booking site and cannot be booked at all. It never changes anything on Turo, and by default it leaves alone any day the host has already priced directly. Limits: 50 vehicles and 366 days per call. Dates that would fall below the host minimum appear in "blocked" and are not written. The token expires in 15 minutes.
preview_geofence
ChatGPTSTEP 1 OF 2 — work out exactly where a geofence would go, without creating it. Returns the resolved address, a Google Maps link, and a confirmToken. SHOW THE HOST the resolved address and the maps link and get their agreement before calling create_geofence. An address can resolve to the wrong city, and a fence in the wrong place never fires — which looks exactly like a car that never moved. The token expires in 15 minutes.
product_help
ChatGPTLook up how to do something in RevHost itself — where a screen is, what a control does, what a feature is called. Use it whenever the host asks "how do I…", "where is…" or "can RevHost…" about the product, INSTEAD of guessing from memory: screens move and features ship, and a confidently wrong answer sends the host hunting for a button that does not exist. Each result carries a page id you can pass straight to ui_navigate to take the host there. This is product documentation, NOT the host's own guest-facing rules — for those use sop_search. Ask one subject at a time: "mute an alert" and "draw a geofence" are two queries, not one.
record_guest_charge
ChatGPTRecord that a reimbursement or charge was raised against a guest in Turo, so the next person on this trip does not raise it again. This does NOT move money and does not raise the charge — raise it on Turo first, then record it here with the amount you entered there. An above-limit request instead creates an escalation and notifies the host. Damage is not a valid kind: it goes to the host.
reopen_task
ChatGPTReopen a done or canceled task. Only the host or whoever created it can.
reservation_stats
ChatGPTCount reservations over a date range, grouped, computed in the database. Use this for ANY "how many", "which day", "busiest", "trend", or "per vehicle" question about trips — never count rows from list_reservations, which returns one page and will undercount. Returns the complete count for the range (no pagination), a byStatus breakdown, and one row per group. - groupBy: none | day | day_of_week | week | month | status | vehicle | source - dateField: pickup (trips STARTING in range, default) | dropoff (trips ENDING in range) | overlap (trips touching the range at any point — cannot be combined with a time-based groupBy) - day_of_week returns real weekday names for the host's timezone, sorted busiest first, with zero-count days included. Do not derive weekdays yourself. - revenue counts COMPLETED/ACTIVE trips only. For money questions prefer get_financial_summary, which is the authority on revenue; the revenue here is a convenience and is bucketed by dateField, not by trip end. Examples: "how many trips this week" → startDate/endDate = the week, dateField=overlap. "Which weekday do most trips start?" → groupBy=day_of_week, dateField=pickup. "Bookings per month this year" → groupBy=month.
restore_vehicle
ChatGPTRestore starter power to a vehicle that was immobilized.
set_direct_default_price
ChatGPTSet the DEFAULT direct-booking daily price for one vehicle — the price charged for every date without a specific price. THIS CHANGES CUSTOMER-FACING PRICES and is the single highest-leverage pricing value: it applies to every unpriced date. Confirm the amount with the host before calling. A vehicle with no default price is hidden from the booking site, so this is also how you make an unpriced vehicle bookable. Returns the previous and new value so you can report the change back.
sop_search
ChatGPTSearch the operating knowledge for an answer to one question: Turo platform policy, the host's own rules and authority limits, the pickup location's facts, and the specific vehicle. Returns ranked results tagged by layer — a host result OVERRIDES a platform one on the same subject, and you must say which is which when relaying an answer. Call it once per distinct subject rather than one broad query: "swap a car mid-trip" and "may I approve this myself" are two searches. If nothing comes back, say so and name what is missing — never fill the gap from general knowledge of how car rental works.
start_task
ChatGPTMark a task in progress. For a team task this claims it — the first person to start it owns it.
submit_feedback
ChatGPTSubmit feedback, bug reports, or feature requests to the RevHost team. Use this when the user wants to report an issue, suggest a feature, or share feedback.
unlock_vehicle
ChatGPTUnlock a vehicle's doors remotely, so anyone standing at the car can open it. Requires a reason, which is written to the audit log.
update_daily_price
ChatGPTSet the price for a specific day on a vehicle
update_daily_prices_bulk
ChatGPTSet or adjust daily prices for a vehicle across a date range in ONE call. mode="set" writes an absolute price to every matched date. mode="adjust_percent" changes each EXISTING price by a percentage (e.g. value=15 raises 15%, value=-10 lowers 10%); dates with no existing price are skipped in adjust mode. Optional daysOfWeek filters matched days (0=Sunday … 6=Saturday), e.g. [5,6] for Fri+Sat. Max 190 days per call. THIS CHANGES CUSTOMER-FACING PRICES — the host must approve.
update_expense
ChatGPTUpdate an existing expense. Use newVehicleId to reassign the expense to a different licensed vehicle.
update_expense_group
ChatGPTApply the same change to every row of a multi-vehicle expense (the bulkGroupId create_expense returned when given appliesTo), e.g. "the car wash was $25, not $22". To change only one car's row, use update_expense on that row instead.
update_private_reservation
ChatGPTChange the dates, status, notes, daily rate, or guest name and contact of a private reservation. Use cancel_private_reservation to cancel. Other guest details are edited in the dashboard at the returned editUrl, never collected in chat.
update_recurring_expense
ChatGPTChange ONE car's recurring expense from its NEXT payment on (months already written stay as they are; fix one of those with update_expense), or put it on hold, resume or stop it. The same expense on other cars is a separate recurring expense and is not touched. Pass updates for changes, action for pause/resume/stop, or both. To end it on a later date instead of now, set updates.end to {type:"until",until}.
update_reminder
ChatGPTUpdate an existing reminder
update_task
ChatGPTEdit or reassign an open task (title, description, urgency, deadline, assignee, vehicle, reservation). Only the host or whoever created it can change what it says. A VA on shift can change the assignee on any task on their shift's fleets, but nothing else about it. Pass dueAt: null to clear the deadline. Reassigning a task someone had started puts it back to open for the new assignee.
update_vehicle
ChatGPTUpdate a vehicle (blocked for Turo-synced vehicles)
vehicle_knowledge_set
ChatGPTSet per-car handoff details: where this specific car sits when it differs from the location default, how the keys change hands, and any EV or quirk detail worth pre-empting. MERGE semantics: omitted fields keep their value, null clears.
vehicle_search
ChatGPTPREFERRED way to find a vehicle. Free-text search over the user's own vehicles, matching case-insensitively against plate, make, model, year, nickname and Turo name. Returns up to 5 candidates. Deleted vehicles are never returned. Use this instead of list_vehicles whenever you are looking for a particular vehicle rather than surveying the whole fleet.
vendor_vehicle_history
ChatGPTWhich vehicle does a vendor/merchant usually belong to? Returns per-vendor vehicle usage counts derived from past expenses. Use to auto-resolve the vehicle when the host says e.g. "paid Shell $40" without naming a car.