add_wish
ChatGPTSaves a trip idea to the wish list (without creating a trip), e.g. when the user says "Japan someday".
create_trip
ChatGPTCreates a new, empty trip in the user's Compi account. Then fill it with save_places, save_stays, save_items and the other save tools (base_version 0).
delete_entries
ChatGPTDeletes single entries (places, stays, day plan entries, decisions, list entries, expenses) from one of the user's trips. Only on the user's request; name the entries before deleting. Can be undone with undo_change. To delete a whole trip use delete_trip.
delete_trip
ChatGPTPermanently deletes a whole trip (cannot be undone). Only on the user's explicit request; confirm_title must exactly match the trip title.
get_changes
ChatGPTWhat changed since a known version (who, when, what), e.g. manual changes in the app.
get_day
ChatGPTDay plan: fixed entries in order, open options, arrivals of overnight flights (arrivals), next step, stay, check-in/check-out, driveMin (driving time of the day in minutes). Without date = today (trip time zone).
get_open_points
ChatGPTWhat the trip is still missing, by urgency: nights without a stay (overnight flights count as in transit), days without plans, open decisions, cancellation deadlines, things still to book, missing prices, unanswered questions from the app, missing packing list. Each point includes a suggested question (ask).
get_planning_context
ChatGPTUse when developing a saved trip idea or resuming a trip. Supply exactly one wish_id or trip_id. Returns fresh authoritative context; never creates or saves anything. Start with list_wishes or list_trips if the ID is unknown.
get_trip
ChatGPTReads a trip with version and IDs. Without filters: everything plus derived (warnings, budget, cash box). Targeted reads: include=["meta"] (version, counts), ["stays"], ["items"] with date_from/date_to, ["issues"] (open points), ["derived"]; ids for single entries.
list_trips
ChatGPTAll of the user's trips with ID, title, dates and version, plus schemaVersion and the server's tools (to detect outdated definitions).
list_wishes
ChatGPTTrip ideas for someday (the user's wish list). A good starting point when someone wants to plan a new trip.
query_trip
ChatGPTSearches saved entries by text (name, title, address, notes, provider …), optionally by type. Returns IDs, versions and matching fields; total/hasMore show whether the list is complete. Then read details with get_trip ids.
save_decisions
ChatGPTAdds or changes decisions with alternative options in one of the user's trips, several at once and atomically (all or nothing). Merge patch: to change an entry, send its id and only the changed fields; null removes a field; unknown fields are rejected with their name. Never deletes entries (use delete_entries). dry_run=true only validates and returns a preview. Every save is versioned and can be undone with undo_change. The response contains the saved values (affected[].fields), the new version for the next save, and next: the most important open points of the trip.
save_expenses
ChatGPTAdds or changes expenses in the trip cash box (who paid, split among whom) in one of the user's trips, several at once and atomically (all or nothing). Merge patch: to change an entry, send its id and only the changed fields; null removes a field; unknown fields are rejected with their name. Never deletes entries (use delete_entries). dry_run=true only validates and returns a preview. Every save is versioned and can be undone with undo_change. The response contains the saved values (affected[].fields), the new version for the next save, and next: the most important open points of the trip.
save_items
ChatGPTAdds or changes day plan entries (activities, drives, flights, rental car pick-up/return, meals, notes) in one of the user's trips, several at once and atomically (all or nothing). Merge patch: to change an entry, send its id and only the changed fields; null removes a field; unknown fields are rejected with their name. Never deletes entries (use delete_entries). dry_run=true only validates and returns a preview. Every save is versioned and can be undone with undo_change. The response contains the saved values (affected[].fields), the new version for the next save, and next: the most important open points of the trip.
save_list_items
ChatGPTAdds or changes list entries (packing list, shopping, to-dos, food to try, open questions) in one of the user's trips, several at once and atomically (all or nothing). Merge patch: to change an entry, send its id and only the changed fields; null removes a field; unknown fields are rejected with their name. Never deletes entries (use delete_entries). dry_run=true only validates and returns a preview. Every save is versioned and can be undone with undo_change. The response contains the saved values (affected[].fields), the new version for the next save, and next: the most important open points of the trip.
save_places
ChatGPTAdds or changes places and access points (sights, beaches, restaurants, parking, entrances) in one of the user's trips, several at once and atomically (all or nothing). Merge patch: to change an entry, send its id and only the changed fields; null removes a field; unknown fields are rejected with their name. Never deletes entries (use delete_entries). dry_run=true only validates and returns a preview. Every save is versioned and can be undone with undo_change. The response contains the saved values (affected[].fields), the new version for the next save, and next: the most important open points of the trip.
save_planning_context
ChatGPTOn explicit user request, save preferences, assumptions, rejected ideas and open questions for an existing wish, before dates are known. Read get_planning_context first. Arrays replace the previous array: preserve entries the user did not change. Record statedBy for another traveller; never infer group agreement. Link tripId only after a real trip exists; the Trip remains the authoritative itinerary. Reuse operation_id on retry.
save_stays
ChatGPTAdds or changes stays (hotels, apartments, campsites) with dates, booking and price in one of the user's trips, several at once and atomically (all or nothing). Merge patch: to change an entry, send its id and only the changed fields; null removes a field; unknown fields are rejected with their name. Never deletes entries (use delete_entries). dry_run=true only validates and returns a preview. Every save is versioned and can be undone with undo_change. The response contains the saved values (affected[].fields), the new version for the next save, and next: the most important open points of the trip.
submit_feedback
ChatGPTSend a rating and optional feedback text ONLY when the user explicitly asks to send feedback about Compi. Generic thanks, frustration or praise is not permission. Help with problems first; ask whether to report if intent is ambiguous. Send only user-approved comment, never conversation history. Contact requires explicit consent. Reuse operation_id on retry. This does not send an email.
undo_change
ChatGPTReverts an earlier version of a trip by saving a counter-change. Fails if affected entries were changed again afterwards.
update_trip
ChatGPTChanges the details of one of the user's trips: title, dates, time zone, currency, travelers, interests, budget, daily driving limit, running costs, notes. Send only changed fields; null removes a field. Versioned and undoable with undo_change.