add_group_member
ChatGPTAdds a name to a group the user is an admin of, at the end of the order. The name joins later through the group link. For a collection a pledge may be given: the amount this member owes in place of the group's share. A name that folds like a member's is refused. The reply is the group setup with the new member row.
approve_entries
ChatGPTApproves entries and recurring debts waiting for the user's answer: either a list of entries and recurring debts, each with its id and the version the user saw, or one person's name to approve everything waiting from them. Give one of the two. An approved entry becomes confirmed and counts for both people; an approved recurring debt is confirmed with its charges. A group's new terms are approved by the group id and terms version in the list; the user then follows them. Something already answered is refused.
archive_contact
ChatGPTArchives one of the user's contacts: give the contact's name. An archived contact is hidden from the user's person lists and name suggestions; balances, any connection and requests from the other person stay as they are, and recording a new entry under the name brings the contact back. Refused while the contact's balance is not zero. A name that only nearly matches a contact is asked back, with nothing changed.
change_recurring
ChatGPTChanges a recurring debt the user set up: its amount, its day of the month or its end date. Name the person and pass the version the user saw; give only what changes (endDate null clears the end date). The change takes effect at once, charges already made stay, and a recurring the other person had approved goes back to waiting for their approval. A changed day keeps one charge a month: if this month's charge is made the new day starts next month. Only the person who set it up can change it. When the person has several recurring the reply lists them; call again with currentAmount. end_recurring stops one.
close_group
ChatGPTCloses a group the user is an admin of, so no further rounds are made. It takes two calls. The first, with the group alone, changes nothing and shows what closing does. The user confirms with the button on the card, which sends the second call with a cardToken; a typed yes does not close. Rounds already made and their entries stay. A member who is not an admin is refused. A group name close to one of the user's groups saves nothing and the reply asks which was meant.
close_project
ChatGPTCloses one of the user's projects, found by its name without regard to case, when the user says it is finished. A closed project keeps its records and takes no new ones. Closing a project that is already closed changes nothing and the reply says so. When the project is not found, nothing changes and the reply says so.
correct_entry
ChatGPTCorrects an entry the user recorded: "the amount was 120, not 100". Pass the entry id, the version the user saw (get_requests and earlier replies show it) and only the fields to change: amount, currency, date, dueDate (null clears it) or note (null clears it). Only the person who recorded the entry can correct it; the person on it cannot change. An entry the other person already answered goes back to waiting for their approval, and the reply says so. undo_correction takes a correction back.
create_group
ChatGPTCreates a group the user runs as its admin: a rotating savings group (gap) or a collection (chip-in). The user is the first member; the names given follow in order and join later through the group link. A rotating group needs shareAmount, dayOfMonth and firstRoundDate; a collection takes an optional shareAmount and target. The reply is the group setup: its terms, each member with their place and role, and whether a group link is live.
create_project
ChatGPTCreates a project, a named group for related records such as "Apartment renovation" or "Wedding 2027", named exactly as given. A name the user already has, in any letter case, returns the existing project and creates no second one. Projects are private to the user. It does not attach any record.
delete_all
ChatGPTDeletes the user's whole Mutally account: the login, their contacts, entries, batches and invite links. Answers "delete all my data", "delete my account" and "delete everything". People connected to the user keep their own side of the record and their own entries. It takes two calls. The first, without confirmation, deletes nothing: it shows the user what goes and who keeps their side; its card has a Delete everything button that confirms from the card itself. Otherwise the second call carries confirmation, the word "delete" or its equivalent in the user's language exactly as the user typed it in a later message of their own, and deletes the account. It cannot be undone. cardToken is sent only by the card's button; the model has no access to it.
delete_entry
ChatGPTDeletes entries the user recorded: "delete this entry". entryIds are the ids from an earlier Mutally result. It takes two calls. The first, with entryIds only, deletes nothing and shows the user what goes. The second, with the same entryIds and confirmed true, deletes them once the user has said "yes", or its equivalent in their own language, in a later message of their own. A card's Delete button sends cardToken instead. A deleted entry leaves the other person's view too and stops counting for both of you; restore_deleted brings it back for 30 days. All the ids are deleted or none.
dispute_entry
ChatGPTMarks one entry or one recurring debt waiting for the user's answer as wrong, with a note saying what is wrong. The note is required and the other person sees it. Give the entry id, or the recurring id for a recurring debt, and the version the user saw. A group's new terms are declined by the group id and terms version, with a note: the user stays on the terms they approved, and the change stays waiting, so it can be declined again or approved later. An entry or recurring debt already answered is refused.
end_connection
ChatGPTEnds the live connection with one of the user's contacts: "stop sharing with Bobur". Give the contact's name. It takes two calls. The first, with the person only, changes nothing and shows the user what each side keeps. The second, with the same person and confirmed true, ends it once the user has said "yes", or its equivalent in their own language, in a later message of their own. A card's button sends cardToken instead. Answers already given stay on record; each person keeps their own contact and entries but stops seeing the other's. A name that only nearly matches is asked back.
end_recurring
ChatGPTEnds a recurring debt the user set up: no more charges are made. Name the person and pass the version the user saw. It takes effect at once; charges already made stay, and a recurring the other person had approved goes back to waiting for their approval. Only the person who set it up can end it. When the person has several recurring the reply lists them; call again with currentAmount. If the other person disputes the ending, undo_ending takes it back.
export
ChatGPTGives the user their own copy of the debt book as two download links that work for 24 hours: a spreadsheet (.xlsx) with a summary, a sheet per person and a people-by-periods grid, and a CSV of every entry. Answers "export my debts" and "send me a spreadsheet of what Bobur and I owe". person is the contact the user named, as they wrote it (a near name is asked back); contactId, when the card gives one, names the person exactly and wins over person; without either, every person is exported. from and to (YYYY-MM-DD) narrow the period; without them it runs from the first line to today. Read-only: nothing changes.
get_balances
ChatGPTShows who owes the user and whom the user owes, per person and currency, in the user's own contact names. Without a filter it lists every non-zero balance. With filter overdue it lists the open debts past their due date; dueThisWeek, the open debts due from today through the next 7 days; waiting, the user's own entries still waiting for the other person to answer; disputed, the user's own entries the other person disputed. Entries waiting for the user's own answer are not listed here. The states list takes several of those filters together and lists the entries that match any of them; the currencies list keeps only those currencies, and with states narrows their entries.
get_group
ChatGPTShows the board of a group the user is an active member of: whose turn it is to receive, each member's share and whether it stands paid, what the recipient has received and what collectors hold. Leave the group out when the user is in one group; with several, the reply lists their names to pick from. Changes nothing.
get_history
ChatGPTShows the history with one person over a period, in the user's own contact name: the opening balance per currency before the period, every entry in the period with its state, id and version, the dates the connection was made or ended, and the closing balance per currency. Without from the period starts at the first line with that person; without to it runs to today. The states list keeps the entries matching any of overdue, dueThisWeek, waiting (the user's own entries awaiting the other person) or disputed; the currencies list keeps only those currencies; they narrow the listed entries, not the opening and closing. A group's entry names its group and round. A name close to a contact is asked back.
get_project
ChatGPTShows one of the user's projects, found by its name without regard to case: its status, its loans and gifts with their ids, and the totals per currency (gave, received and the net), gifts apart and outside every balance. When the project is not found the reply says so.
get_projects
ChatGPTLists the user's projects, open and closed, oldest first, each with its status and its totals per currency (what the user gave, received, and the net, gave minus received). Gifts total apart and sit outside every balance. Projects are private to the user.
get_requests
ChatGPTLists the entries and recurring debts waiting for the user's answer, each with its id and version, and the user's own entries and recurring debts the other person disputed, each with the other person's note. A recurring that was ended and waits for an answer says so. A group's entry names its group and round. A group's new terms waiting for the user's approval are listed with the group id and the terms version. People appear under the user's own contact names. Amounts are from the user's view: negative means the user owes.
leave_group
ChatGPTLeaves a group the user is a member of. It takes two calls. The first, with the group alone, changes nothing and shows what leaving does: future shares stop, what the user still owes this round, and who becomes admin if the user is the last admin. The user confirms with the button on the card, which sends the second call with a cardToken; a typed yes does not leave. The row and rounds already made stay. A group name close to one of the user's groups saves nothing and the reply asks which was meant.
make_group_link
ChatGPTFor a group the user is an admin of, makes the group link members join through, or renews it: the earlier link stops working. Returns the group setup with the link and a ready message the user sends to the members themselves; Mutally sends nothing.
make_invite_link
ChatGPTMakes an invite link for one of the user's contacts, or renews it: the earlier link stops working. Returns the link and a ready message the user sends to that person themselves; Mutally sends nothing. Needs an existing contact, and a contact who is already connected gets no link.
merge_contacts
ChatGPTFolds one of the user's contacts into another that stands for the same person: give the name of the contact to keep and the name of the contact to fold into it. Entries and any connection move to the kept contact and the folded one is removed for good. Two contacts that are both connected to other people cannot be merged. A name that only nearly matches a contact is asked back, with nothing changed. Replies with the kept contact's balances.
preview_import
ChatGPTShows what importing the rows of an uploaded file would do, and saves nothing. Send the rows you read from the file. The reply answers per person: a contact, a name close to a contact (which contact it may be) or a name with no contact, the person's rows and balance after the import. It also lists rows that equal an entry already recorded, which the save skips, and rows that are refused, where one refused row refuses the whole save. Row numbers in the reply text start at 1; row in structured content is the 0-based index into the rows sent.
record_debts
ChatGPTRecords one message's money between the user and other people. Each entry names a person, whether the user gave the money or received it, its kind (opening, loan, repayment, gift, other), the amount, its currency and the day, with an optional due date and note. With project, every entry of the call goes into that project, made when the user has none by that name, and the reply says so; a gift needs one, is seen by the user only and sits outside balances. Each name is matched to the user's contacts in any letter case; a name with no contact becomes a new contact, and the reply names it. When a name is close to a contact without being the same, nothing in the message is saved and the reply asks which contact was meant; calling again with that contact's name, or with newPerson true, saves the message. With bill, the entries are the other people's shares of a bill the user paid, in the bill's currency, and the reply states the total, the user's share and what is owed to the user. An entry with a connected person goes to them as a request to approve; an entry with anyone else is seen by the user only. The same entries sent again within 5 minutes return the first save and add nothing. An entry that looks like one already recorded (same person, direction, kind, amount, currency and day) holds the whole message: nothing is saved or sent, and the reply names the earlier entries; calling again with notDuplicateOf listing those ids saves it.
record_group_payment
ChatGPTRecords a payment in a group the user is a member of, as an ordinary entry between the two members, and replies with the group board. The user's own payment needs only the group: it goes to the round's recipient, for the earliest round still owed, at the user's share. A collector names the member who paid them (payer, paidTo the user), or names the recipient as paidTo to hand over what they hold. An admin names the payer to record a member's payment to the recipient. A member recording someone else's payment is refused. A group or member name close to another saves nothing and the reply asks which was meant. The other person confirms through their requests.
record_holding
ChatGPTRecords money the user holds for someone. With source: the user collected the amount from the source person for the owner ("I got 2M from Zafar for Yusuf"), so the user now owes the owner that amount. With destination: the user paid the destination person on the owner's behalf ("pay Zafar instead"), so what the user owes the owner drops by the amount. Give exactly one of source and destination. An optional fee, feePercent or feeFixed (not both), is owed to the user by the owner and is saved as a commission row. Names resolve as in record_debts: a name close to a contact without being the same saves nothing and the reply asks which contact was meant; calling again with the contact's name, or with newPerson true, saves it. An identical holding already saved holds the call and names the earlier entries; calling again with notDuplicateOf listing those ids saves it.
remove_group_member
ChatGPTRemoves a member from a group the user is an admin of (the user included): their left date ends their future shares and the row stays. If the last admin is removed, the reply says who became admin. A member name close to another asks back and removes nothing. The reply is the group setup without the removed member.
rename_contact
ChatGPTChanges the name the user has for one of their contacts: give the contact's current name and the new name. Only the user sees the name; nothing the other person sees changes. A name the user already uses for another contact is refused. A name that only nearly matches a contact is asked back, with nothing changed.
rename_project
ChatGPTRenames one of the user's projects, found by its current name without regard to case. The project keeps its records. The new name is kept exactly as given and may not be the name of another of the user's projects. When the project is not found, nothing changes and the reply says so.
report_wrong_person
ChatGPTUndoes a connection made with the wrong person: "I linked the wrong Bobur". Give the contact's name. It takes two calls. The first, with the person only, changes nothing and shows the user what each side keeps. The second, with the same person and confirmed true, acts once the user has said "yes", or its equivalent in their own language, in a later message of their own. A card's button sends cardToken instead. It ends the connection and discards every approval and dispute given through it; those entries go back to private. Each person keeps their own contact and entries. A name that only nearly matches is asked back.
restore_deleted
ChatGPTBrings back entries the user deleted in the last 30 days. Answers "undo" right after delete_entry (with those entryIds), "restore", "bring it back" and "show recently deleted". With no entryIds it lists the recently deleted entries, each with the day it is erased for good. With entryIds it restores them, all or none. A restored entry comes back exactly as it was.
save_import
ChatGPTSaves the rows of an uploaded file as imported entries with the file's own dates. Send the same rows as the preview, with an answer for each name the preview listed as close to a contact (the contact's id) or not a contact yet (a new person). While a name is unanswered, or any row is refused, nothing is saved: one refused row refuses the whole save. Rows that equal an entry already recorded are skipped. A row for a connected person goes to them as a request to approve; a row for anyone else is seen by the user only.
set_collectors
ChatGPTFor a group the user is an admin of, either names the collectors of one made, open round (round and collectors; a group whose collectors are set by hand), or sets the collector rotation order (rotationOrder) and puts the group on collector rotation. Give one of the two. The reply is the group setup with each member's collector turn.
set_currency
ChatGPTSaves the user's home currency, the one the approximate totals in balances are shown in, from "my currency is euro" or "show totals in UZS". currency is an ISO 4217 code such as USD, EUR or UZS, in any case. Entries keep their own currencies.
set_group_order
ChatGPTSets the order members receive in, for a group the user is an admin of: every member who has not left, once each, by name. Rounds already made keep their recipient. A name that is not a member is refused and nothing changes. The reply is the group setup with each member's place.
set_group_roles
ChatGPTMakes a member of a group the user is an admin of an admin too (they must have joined through the group link), or steps the user themselves down from admin to member. The last admin cannot step down. The reply is the group setup with each member's role.
set_language
ChatGPTSaves the language the user wants Mutally in, for its cards and replies, from "use Mutally in Spanish" or "switch to Japanese". language is the code: en, es, pt, ar, ru, id, ja, de, fr, tr, uz. null is Automatic, which follows the language of the host app; that is the default.
set_recurring
ChatGPTSets up a recurring debt or an installment plan with one person. mode accrues charges the amount again on the day of every month from the start date, for the months given or until the end date, or without end when neither is given. mode upfront charges the whole amount once on the start date and needs months: they are the due dates of its parts. Give months or endDate, not both. The person resolves as in record_debts: a name close to a contact without being the same saves nothing and the reply asks which contact was meant; calling again with that contact's name, or with newPerson true, saves it. The reply names the next charge. A connected person gets the recurring as a request to approve; for anyone else only the user sees it.
undo_correction
ChatGPTTakes back the latest correction of an entry the user recorded: "undo that change". Pass the entry id; groupId, from the correct_entry result, is optional and only names the correction meant, which must be the latest one still standing. The values come back, and an entry the other person answered goes back to waiting for their approval.
undo_ending
ChatGPTTakes back the ending of a recurring debt that the other person disputed: the recurring goes back on its last terms and waits for their approval again. Charges already made stay; the months that fell inside the ending are charged now. Name the person and pass the version the user saw. Only the person who set it up can undo it, and only after the other person disputed the ending.
update_group
ChatGPTChanges a group the user is an admin of: its name, the share, a collection's target, the day of the month, or a rotating group's first round date. Give only what changes. A new share, target or day applies at once for the user and for members who have not joined; every other joined member is asked to approve it, and the reply names them. A group name close to one of the user's groups saves nothing and the reply asks which was meant. The reply is the group setup.
add_group_member
Claudeapprove_entries
Claudearchive_contact
Claudechange_recurring
Claudeclose_group
Claudeclose_project
Claudecorrect_entry
Claudecreate_group
Claudecreate_project
Claudedelete_all
Claudedelete_entry
Claudedispute_entry
Claudeend_connection
Claudeend_recurring
Claudeexport
Claudeget_balances
Claudeget_group
Claudeget_history
Claudeget_project
Claudeget_projects
Claudeget_requests
Claudeleave_group
Claudemake_group_link
Claudemake_invite_link
Claudemerge_contacts
Claudepreview_import
Clauderecord_debts
Clauderecord_group_payment
Clauderecord_holding
Clauderemove_group_member
Clauderename_contact
Clauderename_project
Claudereport_wrong_person
Clauderestore_deleted
Claudesave_import
Claudeset_collectors
Claudeset_currency
Claudeset_group_order
Claudeset_group_roles
Claudeset_language
Claudeset_recurring
Claudeundo_correction
Claudeundo_ending
Claudeupdate_group
Claude