{"actions":[{"name":"get-group","description":"Fetch the full group data structure. Use only when you need to inspect settings or member details not covered by get-group-summary. For most queries, prefer get-group-summary, get-balances, or list-expenses.","category":"group","mutates":false,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"includeMembers":{"type":"boolean","description":"Include member records. Defaults to true."},"includeSettings":{"type":"boolean","description":"Include group settings. Defaults to true."},"includeExpenses":{"type":"boolean","description":"Include slim expense records. Defaults to false."},"includeSettlements":{"type":"boolean","description":"Include settlement records. Defaults to false."},"includeNotes":{"type":"boolean","description":"Include group notes. Defaults to false."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"create-group","description":"Start tracking shared expenses for a trip, household, event, or any group of people. Provide a name and the other members — you are automatically added if you have a display name set.","category":"group","mutates":true,"requiresGroupId":false,"parametersJsonSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"members":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50},"venmoHandle":{"type":"string","description":"Venmo handle for this member, e.g. @alex."},"paypalEmail":{"type":"string","format":"email","description":"PayPal email address for this member."},"cashAppHandle":{"type":"string","description":"Cash App handle for this member, e.g. $alex."},"preferredCurrency":{"type":"string","minLength":3,"maxLength":3,"description":"Three-letter preferred currency code, e.g. USD."}},"required":["name"],"additionalProperties":false},"minItems":1},"currency":{"type":"string","minLength":3,"maxLength":3,"default":"USD"}},"required":["name","members"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update-group","description":"Update group name.","category":"group","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"change-currency","description":"Change the group currency, converting all existing expenses and settlements to the new currency.","category":"group","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"newCurrency":{"type":"string","minLength":3,"maxLength":3}},"required":["newCurrency"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add-member","description":"Add a person to the group so they can be included in expenses and settlements.","category":"member","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":50},"venmoHandle":{"type":"string","description":"Venmo handle for this member, e.g. @alex."},"paypalEmail":{"type":"string","format":"email","description":"PayPal email address for this member."},"cashAppHandle":{"type":"string","description":"Cash App handle for this member, e.g. $alex."},"preferredCurrency":{"type":"string","minLength":3,"maxLength":3,"description":"Three-letter preferred currency code, e.g. USD."}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"claim-member","description":"Claim a group member as yourself. This links your account to a member so your changes are attributed to you. You should claim a member after creating or joining a group. If a member name matches the user's name, suggest that member.","category":"member","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"member":{"type":"string","description":"The member name to claim as yourself"}},"required":["member"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"set-my-name","description":"Set the authenticated user's display name. Use this when the user tells you their name for the first time. This persists across all groups and future sessions.","category":"member","mutates":true,"requiresGroupId":false,"parametersJsonSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"The user's display name"}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"rename-member","description":"Change a member's display name.","category":"member","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"member":{"type":"string","description":"Current member name"},"name":{"type":"string","minLength":1,"maxLength":50,"description":"New display name"}},"required":["member","name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update-member-preferences","description":"Save a member's payment details or preferences — e.g. their Venmo handle, PayPal email, or preferred currency.","category":"member","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"member":{"type":"string","description":"Member name"},"venmoHandle":{"type":"string","description":"Venmo handle for this member, e.g. @alex."},"paypalEmail":{"type":"string","format":"email","description":"PayPal email address for this member."},"cashAppHandle":{"type":"string","description":"Cash App handle for this member, e.g. $alex."},"preferredCurrency":{"type":"string","minLength":3,"maxLength":3,"description":"Three-letter preferred currency code, e.g. USD."}},"required":["member"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"deactivate-member","description":"Remove a member from future expenses while keeping their history intact. Use when someone leaves the group but has past expenses.","category":"member","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"member":{"type":"string","description":"Member name"}},"required":["member"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add-expense","description":"Record a shared expense — like dinner, groceries, rent, or a taxi — and split the cost among group members. Supports even splits, custom amounts, proportional shares, or itemized receipt lines with tax/tip. If only some members share the cost, set members to restrict who's included (otherwise ALL group members are split in). All member references (paidBy, members, assignedTo, splits, shares) accept display names — resolved by exact or partial match. For itemized: provide items array and optional fees; amount must equal sum of (unitPrice × quantity) + fees. Each item can have assignedTo for who consumed it; unassigned items split among all included members. Fees distribute proportionally to each member's item subtotal.","category":"expense","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"description":{"type":"string","minLength":1,"description":"Human-readable expense description (e.g. \"Dinner at Sushi Palace\")"},"amount":{"type":"number","exclusiveMinimum":0,"description":"Total expense amount. For itemized splits, must equal sum of (item.unitPrice * item.quantity) + sum of fee amounts."},"currencyPaid":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code. MUST be set when the expense is in a different currency than the group (e.g. \"JPY\" for a yen receipt in a USD group). Defaults to group currency if omitted."},"date":{"type":"string","description":"ISO 8601 date string. Defaults to now."},"paidBy":{"type":"string","description":"Name of the member who paid. Defaults to you (the authenticated user) if omitted."},"isCredit":{"type":"boolean","description":"True if this is a credit/reimbursement rather than a charge"},"splitType":{"type":"string","enum":["even","custom","shares","itemized"],"description":"How to split the expense. Use \"itemized\" when you have individual line items (e.g. from a receipt)."},"members":{"type":"array","items":{"type":"string"},"description":"Restrict split to these members (by name). IMPORTANT: if you only want certain people to share the expense, you MUST set this. If omitted, ALL active group members are included in the split."},"splits":{"type":"array","items":{"type":"object","properties":{"member":{"type":"string","description":"Member name"},"amount":{"type":"number","description":"Exact amount this member owes"}},"required":["member","amount"],"additionalProperties":false},"description":"Required for splitType \"custom\". Exact amounts per member."},"shares":{"type":"object","additionalProperties":{"type":"number"},"description":"Required for splitType \"shares\". Map of member name to relative weight (e.g. {\"Alice\": 2, \"Bob\": 1})."},"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Item name (e.g. \"Margherita Pizza\")"},"unitPrice":{"type":"number","description":"Price per unit"},"quantity":{"type":"number","description":"Number of units. Defaults to 1."},"assignedTo":{"type":"array","items":{"type":"string"},"description":"Member names or IDs who consumed this item. If omitted, item is split among all members."}},"required":["name","unitPrice"],"additionalProperties":false},"description":"Required for splitType \"itemized\". Line items from a receipt or bill."},"fees":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Fee label (e.g. \"Sales Tax\", \"Tip\")"},"amount":{"type":"number","description":"Fee amount in the same currency"},"type":{"type":"string","enum":["tax","tip","fee"],"description":"Fee category"}},"required":["name","amount","type"],"additionalProperties":false},"description":"Optional fees for itemized expenses. Distributed proportionally based on each member's item subtotal."},"category":{"type":"string","description":"Expense category label, e.g. food, lodging, transit, groceries."},"tripTag":{"type":"string","description":"Optional trip or event tag for organizing expenses."},"source":{"type":"string","enum":["manual","receipt-scan","import","other"],"description":"How this expense was entered."}},"required":["description","amount","splitType"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add-expenses","description":"Add several expenses at once — e.g. all the meals and activities from a trip. Same parameters and split types as add-expense. More efficient than adding them one at a time.","category":"expense","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"expenses":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","minLength":1,"description":"Human-readable expense description (e.g. \"Dinner at Sushi Palace\")"},"amount":{"type":"number","exclusiveMinimum":0,"description":"Total expense amount. For itemized splits, must equal sum of (item.unitPrice * item.quantity) + sum of fee amounts."},"currencyPaid":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code (e.g. \"USD\"). Defaults to group currency."},"date":{"type":"string","description":"ISO 8601 date string. Defaults to now."},"paidBy":{"type":"string","description":"Name of the member who paid. Defaults to you (the authenticated user) if omitted."},"isCredit":{"type":"boolean","description":"True if this is a credit/reimbursement rather than a charge"},"splitType":{"type":"string","enum":["even","custom","shares","itemized"],"description":"How to split the expense. Use \"itemized\" when you have individual line items (e.g. from a receipt)."},"members":{"type":"array","items":{"type":"string"},"description":"Restrict split to these members (by name). If omitted, all active members are included."},"splits":{"type":"array","items":{"type":"object","properties":{"member":{"type":"string","description":"Member name"},"amount":{"type":"number","description":"Exact amount this member owes"}},"required":["member","amount"],"additionalProperties":false},"description":"Required for splitType \"custom\". Exact amounts per member."},"shares":{"type":"object","additionalProperties":{"type":"number"},"description":"Required for splitType \"shares\". Map of member name to relative weight (e.g. {\"Alice\": 2, \"Bob\": 1})."},"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Item name (e.g. \"Margherita Pizza\")"},"unitPrice":{"type":"number","description":"Price per unit"},"quantity":{"type":"number","description":"Number of units. Defaults to 1."},"assignedTo":{"type":"array","items":{"type":"string"},"description":"Member names or IDs who consumed this item. If omitted, item is split among all members."}},"required":["name","unitPrice"],"additionalProperties":false},"description":"Required for splitType \"itemized\". Line items from a receipt or bill."},"fees":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Fee label (e.g. \"Sales Tax\", \"Tip\")"},"amount":{"type":"number","description":"Fee amount in the same currency"},"type":{"type":"string","enum":["tax","tip","fee"],"description":"Fee category"}},"required":["name","amount","type"],"additionalProperties":false},"description":"Optional fees for itemized expenses. Distributed proportionally based on each member's item subtotal."},"category":{"type":"string","description":"Expense category label, e.g. food, lodging, transit, groceries."},"tripTag":{"type":"string","description":"Optional trip or event tag for organizing expenses."},"source":{"type":"string","enum":["manual","receipt-scan","import","other"],"description":"How this expense was entered."}},"required":["description","amount","splitType"],"additionalProperties":false},"minItems":1}},"required":["expenses"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update-expense","description":"Update an existing expense. Provide only the fields you want to change. If amount or split parameters change, splits are recomputed.","category":"expense","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"expenseId":{"type":"string","description":"Expense ID"},"expenseDescription":{"type":"string","description":"Expense description (for confirmation display, not used for lookup)"},"description":{"type":"string","minLength":1},"amount":{"type":"number","exclusiveMinimum":0},"currencyPaid":{"type":"string","minLength":3,"maxLength":3},"date":{"type":"string"},"paidBy":{"type":"string"},"isCredit":{"type":"boolean"},"splitType":{"type":"string","enum":["even","custom","shares","itemized"]},"members":{"type":"array","items":{"type":"string"},"description":"Restrict split to these members (by name)"},"splits":{"type":"array","items":{"type":"object","properties":{"member":{"type":"string"},"amount":{"type":"number"}},"required":["member","amount"],"additionalProperties":false}},"shares":{"type":"object","additionalProperties":{"type":"number"}},"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"unitPrice":{"type":"number"},"quantity":{"type":"number"},"assignedTo":{"type":"array","items":{"type":"string"}}},"required":["name","unitPrice"],"additionalProperties":false}},"fees":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"amount":{"type":"number"},"type":{"type":"string","enum":["tax","tip","fee"]}},"required":["name","amount","type"],"additionalProperties":false}},"category":{"type":"string","description":"Expense category label, e.g. food, lodging, transit, groceries."},"tripTag":{"type":"string","description":"Optional trip or event tag for organizing expenses."},"source":{"type":"string","enum":["manual","receipt-scan","import","other"],"description":"How this expense was entered."}},"required":["expenseId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update-expense-items","description":"Edit, reassign, add, or remove items in an existing itemized expense. Items can be referenced by ID or name (supports fuzzy matching). Automatically recomputes the expense total and member splits after changes. Use updates to modify existing items, addItems to append new ones, removeItems to delete by name/ID, and fees to replace all fees.","category":"expense","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"expenseId":{"type":"string","description":"ID of the itemized expense to modify"},"updates":{"type":"array","items":{"type":"object","properties":{"itemRef":{"type":"string","description":"Item ID or name (fuzzy match supported)"},"name":{"type":"string","description":"New item name"},"unitPrice":{"type":"number","description":"New unit price"},"quantity":{"type":"number","description":"New quantity"},"assignedTo":{"type":"array","items":{"type":"string"},"description":"New member assignments (names or IDs). Pass empty array to assign to everyone."}},"required":["itemRef"],"additionalProperties":false},"description":"Modifications to existing line items"},"addItems":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Item name"},"unitPrice":{"type":"number","description":"Price per unit"},"quantity":{"type":"number","description":"Number of units. Defaults to 1."},"assignedTo":{"type":"array","items":{"type":"string"},"description":"Member names or IDs. If omitted, item is split among all members."}},"required":["name","unitPrice"],"additionalProperties":false},"description":"New line items to append to the expense"},"removeItems":{"type":"array","items":{"type":"string"},"description":"Item IDs or names to remove (fuzzy match supported)"},"fees":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Fee label"},"amount":{"type":"number","description":"Fee amount"},"type":{"type":"string","enum":["tax","tip","fee"],"description":"Fee category"}},"required":["name","amount","type"],"additionalProperties":false},"description":"Replaces all existing fees. Omit to keep current fees unchanged."}},"required":["expenseId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add-settlement","description":"Record that one member paid another — e.g. via Venmo, cash, or Zelle. Use after get-settlement-suggestions, or when someone pays back directly.","category":"settlement","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"from":{"type":"string","description":"Name of the member who paid. Defaults to you (the authenticated user) if omitted."},"to":{"type":"string","description":"Name of the member who received the payment"},"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"paymentMethod":{"type":"string","enum":["cash","venmo","zelle","paypal","bank_transfer","check","other"],"description":"How the settlement was paid."},"note":{"type":"string"},"date":{"type":"string"}},"required":["to","amount"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add-settlements","description":"Record multiple payments at once — e.g. when settling up an entire group. Same parameters as add-settlement.","category":"settlement","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"settlements":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"paymentMethod":{"type":"string","enum":["cash","venmo","zelle","paypal","bank_transfer","check","other"],"description":"How the settlement was paid."},"note":{"type":"string"},"date":{"type":"string"}},"required":["from","to","amount"],"additionalProperties":false},"minItems":1}},"required":["settlements"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update-settlement","description":"Modify an existing settlement. Provide only the fields you want to change.","category":"settlement","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"settlementId":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"amount":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string","minLength":3,"maxLength":3},"paymentMethod":{"type":"string","enum":["cash","venmo","zelle","paypal","bank_transfer","check","other"],"description":"How the settlement was paid."},"note":{"type":"string"},"date":{"type":"string"}},"required":["settlementId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get-settlement-suggestions","description":"Get the simplified settlement plan — minimum payments to zero out all balances (debts are netted, not pairwise). Use add-settlement to record each payment.","category":"settlement","mutates":false,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"add-note","description":"Leave a note on the group — e.g. reminders, context for expenses, or group decisions. Author defaults to you.","category":"note","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":2000},"author":{"type":"string","description":"Author name. Defaults to you if omitted."}},"required":["content"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"update-note","description":"Edit the content of an existing note.","category":"note","mutates":true,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"noteId":{"type":"string"},"content":{"type":"string","minLength":1,"maxLength":2000}},"required":["noteId","content"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get-balances","description":"See each member's net balance across all expenses and settlements. Balances are already aggregated — use get-settlement-suggestions for the simplified payment plan to settle up.","category":"query","mutates":false,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get-group-summary","description":"Start here for any group. Returns the group overview — name, currency, member count, total spent, and your personal balance. Use this as the entry point before drilling into balances or expenses.","category":"query","mutates":false,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list-groups","description":"Show all the user's groups. Use as an entry point when the user hasn't specified which group, or to help them pick one.","category":"query","mutates":false,"requiresGroupId":false,"parametersJsonSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list-expenses","description":"Browse the group's expense history. Supports search and filtering by payer. Returns slim objects — use get-expense for full detail on any one.","category":"query","mutates":false,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"limit":{"type":"number","minimum":1,"maximum":50,"default":20},"offset":{"type":"number","minimum":0,"default":0},"paidBy":{"type":"string","description":"Filter by member name or ID"},"search":{"type":"string","description":"Search expense descriptions"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get-expense","description":"Get complete details for one expense — who paid, how it was split, and each member's share.","category":"query","mutates":false,"requiresGroupId":true,"parametersJsonSchema":{"type":"object","properties":{"expenseId":{"type":"string","description":"Expense ID"},"expenseDescription":{"type":"string","description":"Expense description (for confirmation display)"}},"required":["expenseId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}]}