get_guide
How Fazmie works, what each tool does and the rules. Read it before starting.
Parâmetros
Sem parâmetros.
Suas finanças. Sua IA. O Fazmie não tem IA própria nem cobra por IA: você conecta a que já usa (Claude, ChatGPT, OpenCode ou outra) pelo MCP (Model Context Protocol). Ela lê e muda os dados da sua casa, só da sua casa, depois de você autorizar. Esta página é gerada do próprio código: o que está aqui é o que o servidor oferece hoje.
Endereço do servidor
https://fazmie.com/api/mcpOs nomes, as descrições e os parâmetros vêm do servidor e estão em inglês: é o idioma que a IA lê. Ela responde no seu idioma.
get_guideHow Fazmie works, what each tool does and the rules. Read it before starting.
Parâmetros
Sem parâmetros.
get_cycleShows the pay cycle (from payday until the day before the next one): overdue bills, payday provisions (savings pots), upcoming bills, paid ones, warnings, free spending and monthly fixed cost. Free-spending weeks come separately in freeSpendingWeeks: they are NOT bills and are not paid. No 'date' = current cycle.
Parâmetros
datestringAny day inside the cycle you want to see
list_itemsLists every entry, largest first, with the total monthly fixed cost.
Parâmetros
Sem parâmetros.
get_settingsCycle start, fixed investment per cycle, reference weekly amount, members and per-cycle overrides.
Parâmetros
Sem parâmetros.
get_investmentsThe household's net worth (already had + contributions to every investment − withdrawals + returns) and, per investment, how much was contributed (contributions marked as invested) and withdrawn. Amounts in reais.
Parâmetros
Sem parâmetros.
get_week_eventsFree-spending telemetry: how each week closed (zeroed, leftover, short) and when the person took money from the next week (borrow; spentBefore = the balance the week had when the person chose 'Reset the current one'). A shortfall can leave the next week negative; in the last week it goes on the next cycle as a one-time entry. Returns the facts and a summary with counts and sums. Amounts in reais. Use it to find patterns (e.g. in how many weeks money ran short).
Parâmetros
sincestringOnly facts from cycles starting on this date or later
get_changesHistory of changes to entries and marks (app, AI and spreadsheet): when, who and what, newest first. Use it to answer 'what was done yesterday?' and to find the id of something to undo.
Parâmetros
daysintegerHow many days back. Default: 7
simulateSimulates a cycle without saving anything: what if the income, the investment or the bills change? Useful to see the effect of cutting or adding a bill on the weekly amount and the fixed cost.
Parâmetros
datestringA day inside the simulated cycle. Default: today
salarynumberinvestAmountnumberremoveItemIdsuuid[]Entries to remove in the simulation
addItemsobject[]New entries in the simulation
addItems[].nameobrigatóriostringName of the bill, income or investment
addItems[].kindobrigatório"bill" | "provision" | "income" | "investment"bill = a bill paid on a date; income = income (monthly salary, or once: 13th salary, bonus, vacation pay); investment = a repeating investment contribution (not spending); provision = old type
addItems[].frequencyobrigatório"monthly" | "weekly" | "yearly" | "once"monthly, weekly, yearly or once (one time)
addItems[].amountobrigatórionumberAmount in reais. For weekly, the amount of each week
addItems[].variablebooleanAn amount that changes (electricity, water, card)
addItems[].cardIduuidPaid by card: id of the credit card bill entry (e.g. a gym charged to the Nubank card). It doesn't add to the cycle's bills, because the money leaves with the card bill; it stays in the fixed cost. null removes it
addItems[].businessDayintegerMonthly on the Nth business day (e.g. salary on the 5th business day = 5), instead of dueDay. The date changes every month (no Saturdays, Sundays or national holidays). null goes back to dueDay
addItems[].dueDayintegerDue day (monthly bills, and yearly). When changed, the past (until yesterday) stays on the old day
addItems[].dueMonthintegerDue month (yearly)
addItems[].weekdayintegerWeekday, 0 = Sunday ... 6 = Saturday (weekly)
addItems[].datestringSingle date (once)
addItems[].nodestringName of the savings pot. Empty = uses the name
addItems[].yearlyMode"spread" | "warn"Yearly bill: spread sets aside 1/12 per cycle; warn only warns ahead
addItems[].activebooleanfalse = paused, not in the cycle
addItems[].endsOnstringInstallments: date of the last one. null = never ends
addItems[].startsOnstringFirst date it applies. Before that it didn't exist. On create, empty (missing or null) = the first occurrence that has not happened yet (never an infinite past); send a past date to charge the past. On update, null = always. With installmentsTotal (and no endsOn) it is the date of installment 1 and the last installment is calculated from it
addItems[].categorystringCategory by name (uppercase). Prefer the app's fixed ones (see the guide; stored names are Portuguese): MORADIA, SAÚDE, FILHOS, ASSINATURAS, CARTÕES... A new name creates a category of the person's own. Card bills go in CARTÕES
addItems[].installmentsTotalintegerInstallments: the purchase's total count (with endsOn shows 'installment 5/48')
addItems[].countsAsFixedbooleanFixed cost, marked by the person. No end: default true. With an end date (installments): default false; true for a long contract (e.g. land). One-time is never fixed
addItems[].ownerstringWho pays: a member's email (see get_settings → members). null = the household (everyone)
addItems[].shift"before" | "after"Income and investment: if the date falls on a weekend or holiday, before moves it earlier, after moves it later, null = stays. Only monthly/yearly. Bills ignore it: they always move to the next business day
create_itemCreates a bill, income or investment. monthly needs dueDay (or businessDay); weekly needs weekday; yearly needs dueDay and dueMonth; once needs date. A financing or any plan with many installments (even 400) is ONE entry: monthly + installmentsTotal + startsOn (the date of installment 1) + dueDay. Never create one entry per month.
Parâmetros
nameobrigatóriostringName of the bill, income or investment
kindobrigatório"bill" | "provision" | "income" | "investment"bill = a bill paid on a date; income = income (monthly salary, or once: 13th salary, bonus, vacation pay); investment = a repeating investment contribution (not spending); provision = old type
frequencyobrigatório"monthly" | "weekly" | "yearly" | "once"monthly, weekly, yearly or once (one time)
amountobrigatórionumberAmount in reais. For weekly, the amount of each week
variablebooleanAn amount that changes (electricity, water, card)
cardIduuidPaid by card: id of the credit card bill entry (e.g. a gym charged to the Nubank card). It doesn't add to the cycle's bills, because the money leaves with the card bill; it stays in the fixed cost. null removes it
businessDayintegerMonthly on the Nth business day (e.g. salary on the 5th business day = 5), instead of dueDay. The date changes every month (no Saturdays, Sundays or national holidays). null goes back to dueDay
dueDayintegerDue day (monthly bills, and yearly). When changed, the past (until yesterday) stays on the old day
dueMonthintegerDue month (yearly)
weekdayintegerWeekday, 0 = Sunday ... 6 = Saturday (weekly)
datestringSingle date (once)
nodestringName of the savings pot. Empty = uses the name
yearlyMode"spread" | "warn"Yearly bill: spread sets aside 1/12 per cycle; warn only warns ahead
activebooleanfalse = paused, not in the cycle
endsOnstringInstallments: date of the last one. null = never ends
startsOnstringFirst date it applies. Before that it didn't exist. On create, empty (missing or null) = the first occurrence that has not happened yet (never an infinite past); send a past date to charge the past. On update, null = always. With installmentsTotal (and no endsOn) it is the date of installment 1 and the last installment is calculated from it
categorystringCategory by name (uppercase). Prefer the app's fixed ones (see the guide; stored names are Portuguese): MORADIA, SAÚDE, FILHOS, ASSINATURAS, CARTÕES... A new name creates a category of the person's own. Card bills go in CARTÕES
installmentsTotalintegerInstallments: the purchase's total count (with endsOn shows 'installment 5/48')
countsAsFixedbooleanFixed cost, marked by the person. No end: default true. With an end date (installments): default false; true for a long contract (e.g. land). One-time is never fixed
ownerstringWho pays: a member's email (see get_settings → members). null = the household (everyone)
shift"before" | "after"Income and investment: if the date falls on a weekend or holiday, before moves it earlier, after moves it later, null = stays. Only monthly/yearly. Bills ignore it: they always move to the next business day
create_itemsCreates several entries at once (e.g. importing a spreadsheet). Same rules as create_item.
Parâmetros
itemsobrigatórioobject[] (max 200)items[].nameobrigatóriostringName of the bill, income or investment
items[].kindobrigatório"bill" | "provision" | "income" | "investment"bill = a bill paid on a date; income = income (monthly salary, or once: 13th salary, bonus, vacation pay); investment = a repeating investment contribution (not spending); provision = old type
items[].frequencyobrigatório"monthly" | "weekly" | "yearly" | "once"monthly, weekly, yearly or once (one time)
items[].amountobrigatórionumberAmount in reais. For weekly, the amount of each week
items[].variablebooleanAn amount that changes (electricity, water, card)
items[].cardIduuidPaid by card: id of the credit card bill entry (e.g. a gym charged to the Nubank card). It doesn't add to the cycle's bills, because the money leaves with the card bill; it stays in the fixed cost. null removes it
items[].businessDayintegerMonthly on the Nth business day (e.g. salary on the 5th business day = 5), instead of dueDay. The date changes every month (no Saturdays, Sundays or national holidays). null goes back to dueDay
items[].dueDayintegerDue day (monthly bills, and yearly). When changed, the past (until yesterday) stays on the old day
items[].dueMonthintegerDue month (yearly)
items[].weekdayintegerWeekday, 0 = Sunday ... 6 = Saturday (weekly)
items[].datestringSingle date (once)
items[].nodestringName of the savings pot. Empty = uses the name
items[].yearlyMode"spread" | "warn"Yearly bill: spread sets aside 1/12 per cycle; warn only warns ahead
items[].activebooleanfalse = paused, not in the cycle
items[].endsOnstringInstallments: date of the last one. null = never ends
items[].startsOnstringFirst date it applies. Before that it didn't exist. On create, empty (missing or null) = the first occurrence that has not happened yet (never an infinite past); send a past date to charge the past. On update, null = always. With installmentsTotal (and no endsOn) it is the date of installment 1 and the last installment is calculated from it
items[].categorystringCategory by name (uppercase). Prefer the app's fixed ones (see the guide; stored names are Portuguese): MORADIA, SAÚDE, FILHOS, ASSINATURAS, CARTÕES... A new name creates a category of the person's own. Card bills go in CARTÕES
items[].installmentsTotalintegerInstallments: the purchase's total count (with endsOn shows 'installment 5/48')
items[].countsAsFixedbooleanFixed cost, marked by the person. No end: default true. With an end date (installments): default false; true for a long contract (e.g. land). One-time is never fixed
items[].ownerstringWho pays: a member's email (see get_settings → members). null = the household (everyone)
items[].shift"before" | "after"Income and investment: if the date falls on a weekend or holiday, before moves it earlier, after moves it later, null = stays. Only monthly/yearly. Bills ignore it: they always move to the next business day
propose_itemProposes a bill, income or investment for the user to review and confirm interactively with buttons in the chat, instead of directly saving it to the database. Use this when the user is asking for suggestions, planning, or asking how to log a new bill. The app renders an interactive confirmation card with [Criar lançamento] and [Descartar] buttons.
Parâmetros
nameobrigatóriostringName of the bill, income or investment
kindobrigatório"bill" | "provision" | "income" | "investment"bill = a bill paid on a date; income = income (monthly salary, or once: 13th salary, bonus, vacation pay); investment = a repeating investment contribution (not spending); provision = old type
frequencyobrigatório"monthly" | "weekly" | "yearly" | "once"monthly, weekly, yearly or once (one time)
amountobrigatórionumberAmount in reais. For weekly, the amount of each week
variablebooleanAn amount that changes (electricity, water, card)
cardIduuidPaid by card: id of the credit card bill entry (e.g. a gym charged to the Nubank card). It doesn't add to the cycle's bills, because the money leaves with the card bill; it stays in the fixed cost. null removes it
businessDayintegerMonthly on the Nth business day (e.g. salary on the 5th business day = 5), instead of dueDay. The date changes every month (no Saturdays, Sundays or national holidays). null goes back to dueDay
dueDayintegerDue day (monthly bills, and yearly). When changed, the past (until yesterday) stays on the old day
dueMonthintegerDue month (yearly)
weekdayintegerWeekday, 0 = Sunday ... 6 = Saturday (weekly)
datestringSingle date (once)
nodestringName of the savings pot. Empty = uses the name
yearlyMode"spread" | "warn"Yearly bill: spread sets aside 1/12 per cycle; warn only warns ahead
activebooleanfalse = paused, not in the cycle
endsOnstringInstallments: date of the last one. null = never ends
startsOnstringFirst date it applies. Before that it didn't exist. On create, empty (missing or null) = the first occurrence that has not happened yet (never an infinite past); send a past date to charge the past. On update, null = always. With installmentsTotal (and no endsOn) it is the date of installment 1 and the last installment is calculated from it
categorystringCategory by name (uppercase). Prefer the app's fixed ones (see the guide; stored names are Portuguese): MORADIA, SAÚDE, FILHOS, ASSINATURAS, CARTÕES... A new name creates a category of the person's own. Card bills go in CARTÕES
installmentsTotalintegerInstallments: the purchase's total count (with endsOn shows 'installment 5/48')
countsAsFixedbooleanFixed cost, marked by the person. No end: default true. With an end date (installments): default false; true for a long contract (e.g. land). One-time is never fixed
ownerstringWho pays: a member's email (see get_settings → members). null = the household (everyone)
shift"before" | "after"Income and investment: if the date falls on a weekend or holiday, before moves it earlier, after moves it later, null = stays. Only monthly/yearly. Bills ignore it: they always move to the next business day
reasonstringShort explanation of why this entry is proposed
propose_changeProposes ONE change that eases this week or this cycle, shown in the chat as a card with [Aplicar] and [Descartar]; nothing is saved until the person taps Aplicar. Kinds: borrow_week (take an amount from the following week; in the last week, from the next cycle), skip_bill (skip a bill that isn't fixed cost, this cycle only; actionKey from get_cycle), skip_investment (skip this cycle's contribution; offer it only next to other options, never alone), spread_yearly (a yearly bill starts setting aside 1/12 per cycle; itemId from list_items). One call per option: to offer two ways out, call it twice.
Parâmetros
kindobrigatório"borrow_week" | "skip_bill" | "skip_investment" | "spread_yearly"amountnumberborrow_week: amount in reais
weekNumberintegerborrow_week: the week that receives the money (default: today's week)
actionKeystringskip_bill / skip_investment: the actionKey from get_cycle
itemIduuidspread_yearly: the yearly bill's id
reasonstringOne short sentence: why this option
update_itemChanges an entry's fields. Send only what changes. Use active=false to pause.
Parâmetros
idobrigatóriouuidnamestringName of the bill, income or investment
kind"bill" | "provision" | "income" | "investment"bill = a bill paid on a date; income = income (monthly salary, or once: 13th salary, bonus, vacation pay); investment = a repeating investment contribution (not spending); provision = old type
frequency"monthly" | "weekly" | "yearly" | "once"monthly, weekly, yearly or once (one time)
amountnumberAmount in reais. For weekly, the amount of each week
variablebooleanAn amount that changes (electricity, water, card)
cardIduuidPaid by card: id of the credit card bill entry (e.g. a gym charged to the Nubank card). It doesn't add to the cycle's bills, because the money leaves with the card bill; it stays in the fixed cost. null removes it
businessDayintegerMonthly on the Nth business day (e.g. salary on the 5th business day = 5), instead of dueDay. The date changes every month (no Saturdays, Sundays or national holidays). null goes back to dueDay
dueDayintegerDue day (monthly bills, and yearly). When changed, the past (until yesterday) stays on the old day
dueMonthintegerDue month (yearly)
weekdayintegerWeekday, 0 = Sunday ... 6 = Saturday (weekly)
datestringSingle date (once)
nodestringName of the savings pot. Empty = uses the name
yearlyMode"spread" | "warn"Yearly bill: spread sets aside 1/12 per cycle; warn only warns ahead
activebooleanfalse = paused, not in the cycle
endsOnstringInstallments: date of the last one. null = never ends
startsOnstringFirst date it applies. Before that it didn't exist. On create, empty (missing or null) = the first occurrence that has not happened yet (never an infinite past); send a past date to charge the past. On update, null = always. With installmentsTotal (and no endsOn) it is the date of installment 1 and the last installment is calculated from it
categorystringCategory by name (uppercase). Prefer the app's fixed ones (see the guide; stored names are Portuguese): MORADIA, SAÚDE, FILHOS, ASSINATURAS, CARTÕES... A new name creates a category of the person's own. Card bills go in CARTÕES
installmentsTotalintegerInstallments: the purchase's total count (with endsOn shows 'installment 5/48')
countsAsFixedbooleanFixed cost, marked by the person. No end: default true. With an end date (installments): default false; true for a long contract (e.g. land). One-time is never fixed
ownerstringWho pays: a member's email (see get_settings → members). null = the household (everyone)
shift"before" | "after"Income and investment: if the date falls on a weekend or holiday, before moves it earlier, after moves it later, null = stays. Only monthly/yearly. Bills ignore it: they always move to the next business day
delete_itemDeletes an entry. It isn't gone for good: it goes to the history and can be undone with undo_change. Before deleting something that looks duplicated, compare name, day and amount and ask the person: two similar entries on different days are NOT duplicates. To pause, prefer update_item with active=false.
Parâmetros
idobrigatóriouuiddelete_itemsDeletes several entries at once (up to 500), for example the one-per-month entries created by mistake for a plan that should be a single entry. They aren't gone for good: they go to the history and each can be undone with undo_change. Show the person what will be deleted and wait for them to confirm. Compare names, days and amounts first: similar entries on different days are NOT duplicates.
Parâmetros
idsobrigatóriouuid[] (max 500)rename_categoryRenames a category in every entry. Using another category's name merges both. Empty to = deletes it (entries end up without a category).
Parâmetros
fromobrigatóriostringtoobrigatóriostringaudit_categoriesAudits the household's entries and finds categorization discrepancies without calling external AI (zero cost): 1) detects items in OUTROS that match known semantic keywords, 2) detects conflicting categories for entries with similar names across the household (e.g. partner logged 'Obra' in one category and 'Reforma' in another, or one logged in MORADIA and another in OUTROS).
Parâmetros
Sem parâmetros.
list_projectsLists every project (a named plan for a life event: trip, wedding, renovation, party) with its summary: ring (paid vs budget or planned), next payment due, days to the event, planned amount per cycle and budget alert. A project only groups entries so the person sees insight on those expenses; it never changes the cycle math.
Parâmetros
Sem parâmetros.
get_projectOne project with its summary and its entries.
Parâmetros
idobrigatóriouuidcreate_projectCreates a project (a named plan grouping entries). kind is trip, wedding, renovation, party or blank. budget is optional and only a reference (it never blocks anything); eventOn is the optional event date (YYYY-MM-DD).
Parâmetros
nameobrigatóriostringName of the plan (e.g. Trip to Japan)
kindobrigatório"trip" | "wedding" | "renovation" | "party" | "blank"What kind of life event it is
budgetnumberOptional budget in reais (reference only)
eventOnstringOptional event date (YYYY-MM-DD)
update_projectChanges a project. Send only what changes. budget or eventOn as null clears it.
Parâmetros
idobrigatóriouuidnamestringkind"trip" | "wedding" | "renovation" | "party" | "blank"budgetnumberBudget in reais (reference only). null clears it
eventOnstringEvent date. null clears it
close_projectMarks a project closed (it lives in a collapsed section) or reopens it. Deleting is separate (delete_project).
Parâmetros
idobrigatóriouuidclosedobrigatóriobooleantrue closes, false reopens
set_items_projectAttaches many entries to projects at once (up to 500): { itemId, projectId }. projectId null detaches. Only one-time and installment entries can join a project (recurring monthly, weekly and yearly are refused); an entry must have a date. Closed, deleted and foreign projects are refused. Prefer it over repeating a single attach.
Parâmetros
itemsobrigatórioobject[] (max 500)items[].itemIdobrigatóriouuiditems[].projectIdobrigatóriouuidThe project, or null to detach
delete_projectDeletes a project (soft delete: its entries keep their project and it can be undone with undo_change). Show the person what you will delete and wait for them to confirm.
Parâmetros
idobrigatóriouuidmark_doneMarks a cycle action as done (bill paid, money set aside, investment made). Use payDate and actionKey from get_cycle. For amounts that change, send paidAmount.
Parâmetros
payDateobrigatóriostringactionKeyobrigatóriostringpaidAmountnumberReal amount paid, in reais
doneBystringWho did it. Default: the AI's name
status"paid" | "provisioned" | "skipped" | "pending"paid = paid (default); provisioned = money set aside, not paid yet; skipped = skip this month only; pending = to pay with a different amount this month (send paidAmount)
unmark_doneUndoes an action marked as done.
Parâmetros
payDateobrigatóriostringactionKeyobrigatóriostringrecord_paymentsRecords many payments of ONE entry at once, by month (e.g. a financing statement: '2022-03: R$ 1,850.12'). Use it after create_item for a plan that already has history, instead of creating one entry per month. Each month becomes 'paid' with the amount given; months with no installment are returned in `skipped`. Up to 600 months per call. Only bills and investments (not income).
Parâmetros
itemIdobrigatóriouuidpaymentsobrigatórioobject[] (max 600)payments[].monthobrigatóriostringpayments[].paidAmountobrigatórionumberReal amount paid, in reais
payments[].paidOnstringThe day it was paid, if the statement says. Default: the due date
doneBystringWho did it. Default: the AI's name
confirm_incomesSays how much will really come in for each income of a cycle (variable income). No 'date' = the next cycle. Use the income's name (e.g. 'Salary 1'). Amounts in reais.
Parâmetros
datestringAny day inside the cycle. Default: the next cycle
amountsobrigatórioobject[]amounts[].nameobrigatóriostringamounts[].amountobrigatórionumberimport_spreadsheetStep 1 of importing a spreadsheet or statement. YOU read the file; send its rows here and the server decides how they fit Fazmie: one entry per thing (not one per month), installment plans, fixed or variable amounts, the app's categories, and which rows are payments already made. Nothing is saved yet. Send rows in chunks of up to 400 (call again with the same importId; do not resend a chunk), with done=false while more rows are coming and done=true on the last chunk to get the review. Show the review to the person, fix what they say with `overrides` in commit_import, then call commit_import.
Parâmetros
importIduuidFrom the first call. Omit it to start a new import
rowsobject[] (max 400)rows[].nameobrigatóriostringThe name as written in the sheet (keep '3/12' if it is there)
rows[].amountobrigatórionumberAmount in reais, positive
rows[].dateobrigatóriostringThe due date if the sheet has it; otherwise the day it was paid or received. YYYY-MM-DD
rows[].paidbooleantrue if this row was already paid / received
rows[].paidAmountnumberAmount really paid, if different from amount
rows[].paidOnstringThe day it was paid, if the sheet has it apart from date
rows[].type"expense" | "income" | "investment"Default expense
rows[].categorystringThe sheet's category column, as written
rows[].installmentstring'3/12', if the sheet has it in its own column
donebooleantrue on the last chunk: returns the full review
commit_importStep 2: saves what import_spreadsheet proposed, after the person agreed. Creates the entries and records the payments already made. `overrides` fix single entries by ref (name, category, amount, dueDay, variable, countsAsFixed, skip). Entries marked SKIPPED (already in the app) are not created unless an override says skip=false. Returns the created ids: pass them to delete_items to undo the whole import.
Parâmetros
importIdobrigatóriouuidoverridesobject[] (max 500)overrides[].refobrigatóriostringoverrides[].namestringoverrides[].categorystringoverrides[].amountnumberoverrides[].dueDayintegeroverrides[].variablebooleanoverrides[].countsAsFixedbooleanoverrides[].skipbooleanupdate_settingsChanges settings for every cycle. Send only what changes. Amounts in reais.
Parâmetros
cycleMode"income" | "day"income = the cycle starts when a monthly income comes in; day = a fixed day (no fixed salary)
cycleIncomeIduuidincome mode: id of the income entry that starts the cycle (list_items, kind = income)
paydayDayintegerday mode: the fixed day the cycle starts
investAmountnumberreferenceWeeklynumberset_cycle_overrideSets the income total and/or investment for one cycle only (13th salary, bonus, vacation pay). payDate is the real payday (see get_cycle). Send both as null to remove.
Parâmetros
payDateobrigatóriostringsalarynumberinvestAmountnumbernotestringlist_content_deliveriesLists all communication and notification templates (morning summary, payday, friday close, partner actions) with their active status, delivery channels (push, email, whatsapp) and localized copies.
Parâmetros
Sem parâmetros.
update_content_deliveryUpdates the channels (push, email, whatsapp), the pause (active) or the localized copy of a message, with no deploy. Copy can only be edited for cycle_payday ({amount}, {date}), monday_plan ({amount}) and friday_week_close ({amount}); the other messages are built by the system (channels and pause only). partner_action only has push.
Parâmetros
idobrigatóriostringID of the message template, e.g. morning_summary, cycle_payday, friday_week_close, partner_action
channels"push" | "email" | "whatsapp"[]Active delivery channels for this notification
activebooleanWhether this notification template is active or paused
copyPtobjectPortuguese copy template
copyEnobjectEnglish copy template
undo_changeUndoes a change from the history (id from get_changes): puts the entry or the mark back as it was. Show the person what you will undo and wait for them to confirm.
Parâmetros
idobrigatóriouuidAo conectar, a IA recebe este manual. É assim que ela aprende as regras do Fazmie.
FAZMIE GUIDE (always up to date)
WHAT IT IS
Fazmie organizes a household's money. You only see and change the household that authorized you.
HOW MONEY IS PLANNED
- By cycle: from the day the income that starts the cycle comes in until the day before the next one. It is not the calendar month.
- A salary is an income entry like any other (kind = income), usually monthly (frequency = monthly).
13th salary, bonus and vacation pay are one-time income (frequency = once). The cycle's money is the sum of the income in it.
- Income or bill on the "Nth business day" (e.g. salary on the 5th business day): businessDay instead of dueDay. The date changes every month.
- The app's fixed categories (every household has them; nobody renames or deletes them). Their stored names are Portuguese
(use them as written). Bills: MORADIA (housing), ALIMENTAÇÃO (food), TRANSPORTE (transport), SAÚDE (health), EDUCAÇÃO (education),
FILHOS (children), PETS, ASSINATURAS (subscriptions), LAZER (leisure), IMPOSTOS (taxes), DÍVIDAS (debts), CARTÕES (credit card
bills), OUTROS (other). Income: SALÁRIO (salary), RENDA EXTRA (extra income), 13º E BÔNUS (13th and bonus), RENDIMENTOS (returns),
REEMBOLSO (refund). Investment: INVESTIMENTO. Use a fixed one whenever it fits; a new name creates a category of the person's own
(e.g. THIAGO, CNPJ).
- Paid by card (cardId): a bill charged to a credit card (subscription, gym) is linked to the card's bill. It doesn't add to the
cycle's bills (the money leaves with the card bill) and the card bill shows "includes ...". It still shows in the list
(marked "cleared" when the charge hits the card; paying the bank is marking the card bill paid). When adding a subscription, ask if it's
on a card. Changing cardId (or sending null) applies from today on: past months stay on the previous card.
- A bill that falls on a weekend or holiday moves by itself to the next business day (the law); there is no choice. shift
(before/after) is only for income and investments: what to do if the date falls on a weekend or holiday, monthly and yearly.
- Amounts in Brazilian reais (R$). In tools, dates are YYYY-MM-DD.
- A bill's states: to pay, overdue, provisioned (the money was already set aside) and paid. Income doesn't have these states.
- Free spending: what's left of the income after bills and the investment, split into weeks (freeSpendingWeeks in get_cycle).
A week is NOT a bill: there's no "paid week" or "unpaid week". It ends by itself on its last day. Then the person says in the app
how it closed (zeroed, leftover or short; closedAs). A week balance can go negative (a shortfall bigger than the next
week leaves it negative). In the cycle's last week a shortfall is taken from the next cycle instead, as a normal
one-time entry there. "provisioned" = the week's money was set aside in a separate pot. "balance" is
the BALANCE the person says they still have (the card; they update it by hand to "hold back a bit"); "planned" is the calculated
share of free spending. The balance doesn't go into any calculation. Never offer to mark a week as paid. For patterns, use
get_week_events.
The app does NOT record day-to-day spending (on purpose): never say "no spending recorded". The person can change a week's amount
by hand; don't invent a reason for a different amount. Only mention borrowing ("borrow") that shows up in get_week_events, with its date.
- Fixed cost: the sum of entries marked as fixed cost (countsAsFixed), per month. Income is never a fixed cost.
- LONG PLANS AND FINANCING (important). A financing, loan or any plan with many installments (even 400 of them, with years of
history) is ONE entry, never one entry per month: create_item {kind: bill, frequency: monthly, dueDay, installmentsTotal: N,
startsOn: the date of installment 1, amount: the usual installment}. The last installment and the "installment 57/420"
numbering follow from that. Installments before the app's history start count as paid by themselves. To keep the REAL amounts
and dates from a statement, send them all in ONE call to record_payments (month + paid amount, up to 600 per call): do not
call mark_done once per month. If entries were already created one per month by mistake, create the single plan, record
their payments with record_payments, then remove the extras with delete_items (one call, up to 500, undoable); show the
person what will be removed and wait for the OK first.
- IMPORTING A SPREADSHEET OR STATEMENT (many rows): never create entries one by one. YOU read the file; the server classifies.
1) import_spreadsheet: send the rows (name, amount, date, paid, category column, type) in chunks of up to 400, reusing the
importId, with done=false until the last chunk (done=true returns the review). Send the due date when the sheet has it, else
the payment date; keep "3/12" in the name. Use type income / investment when the sheet says so. Never resend a chunk.
2) Show the person the review: counts, what needs attention, and the categories the server was not sure about. Nothing is
saved yet. 3) commit_import with the importId and overrides (by ref) for what the person corrected, e.g. category or skip.
It creates the entries and records the payments already made. Entries already in the app are skipped. To undo, delete_items
with the returned createdIds. The server groups by name: the same name on different days of a month stays separate.
- Many AI apps stop after about 60 tool calls in one turn. Prefer the bulk tools (create_items, record_payments, delete_items,
set_items_project) over repeating a single-item tool.
- PROJECTS (grouping only). A project is a named plan for a life event (trip, wedding, renovation, party) that only
GROUPS entries so the person sees insight on those expenses; it never changes the cycle math. Only one-time and
installment BILLS can join a project (income, investment, and recurring monthly, weekly and yearly entries cannot);
every project entry is a normal entry with a date. A budget is only a reference (it never blocks anything).
TOOLS
See:
- get_cycle: the current cycle or the one of a date (overdue, what's due, what was paid, fixed cost). Start here.
- get_week_events: how each free-spending week closed (zeroed, leftover, short) and when the person took money from the next week (from the next cycle, in the last week). Read-only: the person answers in the app.
- get_changes: what changed in the last days (who, when, what). undo_change undoes a change by id (confirm first).
- get_investments: the household's net worth (already had + contributions − withdrawals + returns) and each investment's contributions and withdrawals.
- list_items: every entry.
- get_settings: the cycle (which income starts it), investment and who is in the household. Salaries: see list_items with kind = income.
- get_guide: this guide.
Entries:
- create_item: adds a bill, an income OR an investment (once, monthly, weekly, yearly or in installments; only bills have installments).
An investment is an entry (kind = investment): a repeating contribution, taken before free spending and not counted as spending or fixed cost. Didn't invest in a cycle? mark_done with status skipped. Invested another amount? mark_done with paidAmount.
- create_items: adds several at once (e.g. the person sends their spreadsheet).
- propose_item: proposes an entry with an interactive confirmation card for the person to review before saving.
- propose_change: proposes ONE change for this cycle as a card the person applies (take from the next week, skip a
bill that isn't fixed, skip this cycle's contribution, set a yearly bill aside per cycle). Nothing is saved until
they tap Aplicar. When the Home sends the person to ease a week or a cycle, offer one or two of these, never fixed
bills, and the contribution only as one option among others.
- record_payments: records many payments of ONE entry by month (a financing statement, a card history) in one call.
- update_item: changes an entry (amount, day, category, fixed cost, shift...).
- delete_item: deletes an entry (can be undone). First compare name, day and amount: the same name on different days
(e.g. child support on the 5th and the 15th) is NOT a duplicate. When in doubt, ask and don't delete.
- delete_items: deletes several entries at once (undoable). Confirm with the person first.
- rename_category: renames a category in every entry.
- audit_categories: audits household entries and flags categorization discrepancies (e.g. items in OUTROS matching known keywords, or conflicting categories for similar names).
Marking:
- mark_done: marks a cycle bill as paid (or provisioned), with the amount paid. A free-spending week: provisioned only.
- unmark_done: undoes the mark.
Projects:
- list_projects: every project with its summary (ring, next payment due, days to the event, planned amount per cycle, budget alert).
- get_project: one project with its summary and its entries.
- create_project: a named plan (kind trip, wedding, renovation, party or blank; optional budget and event date).
- update_project: changes a project (budget or eventOn as null clears it).
- close_project: closed=true closes it (collapsed section), false reopens it.
- set_items_project: attaches MANY entries at once ({itemId, projectId}; null detaches). Only one-time and installment
bills can join; prefer it over repeating a single attach.
- delete_project: deletes a project (its entries keep their project; undoable).
Settings and variable income:
- update_settings: changes settings (fixed cost goal, which income starts the cycle...). investAmount is the old way: prefer an entry with kind = investment.
- confirm_incomes: confirms how much really came in during a cycle (variable salary).
- set_cycle_override: changes the income total or the investment for one cycle only.
Content delivery and notifications:
- list_content_deliveries: lists all configured notifications and communication templates (morning summary, payday, friday wrap-up, partner actions), with active channels (push, email, whatsapp) and localized copy.
- update_content_delivery: updates a notification template's active status, delivery channels (push, email, whatsapp) and localized copy (title, body in pt and en) without needing code deploys.
Testing:
- simulate: "what if" without changing anything (e.g. what if I cut this bill?).
RULES
- Talk in the person's language, with short sentences.
- Before deleting, changing amounts or marking several bills, show what you will do and wait for the person to confirm.
- "I paid X": find the bill in the cycle with get_cycle and use mark_done with the amount said.
- Never show the access key or save it in a public file.