create_expense
Record one thing the user spent money on. Use for spend with no itinerary item of its own — meals, transport, visa fees, a booking that isn't on the trip. If the purchase IS already on the itinerary, set its price with update_flight/update_accommodation/update_activity instead; doing both counts it twice. Pass source_ref when importing so a re-run can't duplicate it.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | What it was, as the user would recognise it | |
| amount | Yes | The total actually paid. Never a deposit, a per-night rate or a single fee. | |
| stay_id | No | The stop this belongs to. Omit unless certain — an expense with a date is attributed to the stop whose dates contain it automatically. | |
| category | Yes | One of the app's expense categories. Food is 'restaurant'. | |
| currency | Yes | ISO 4217 code, e.g. USD, EUR, THB | |
| spent_on | Yes | ISO date, e.g. 2026-08-01 | |
| amount_usd | No | The same amount in USD, frozen at entry. Set it ONLY when the source states a USD (or already-converted home-currency) figure. Omit otherwise — the app converts at the live rate, which is honest, whereas a guessed historical rate is frozen forever. | |
| journey_id | Yes | ||
| source_ref | No | Where this came from, e.g. 'gmail:<messageId>'. Unique per user — a repeat import is refused. | |
| related_event_id | No | The flight/booking/activity this relates to, if any. |