Skip to main content

Goals

A goal is the user's primary financial objective. Every Ozzie user has one active goal at a time, and it drives everything: the financial plan, the Money Moves cadence, and the coaching tone.

Two goal types​

savings β€” The user is building toward something: an emergency fund, a vacation, a down payment, or just general financial security.

debt β€” The user is paying off something: a credit card balance, a personal loan, a car payment. The plan focuses on accelerating payoff.

Goal attributes​

FieldDescription
goal_type"savings" or "debt"
goal_nameHuman label, e.g. "Emergency Fund" or "Pay off Visa card"
target_amountThe finish line in the user's currency
starting_amountWhere they start (current savings or current debt balance)
cadenceHow often they want to take action
next_move_dateWhen the next Money Move is due

Cadence options​

CadenceFrequency
weeklyEvery 7 days
biweeklyEvery 14 days
twice_monthly1st and 15th of each month
monthlyOnce a month

The cadence determines how often Ozzie generates new Money Move cycles. A user who wants aggressive progress picks weekly; one who wants a lighter touch picks monthly.

How goals drive the system​

Goal (type + target + cadence)
β”‚
β”œβ”€β”€ Plan generation (timeline, allocations)
β”‚ └── "You'll reach your target in 14 months"
β”‚
└── Money Moves (DO tasks with amounts)
└── "Transfer $200 to savings this week"

The goal is the anchor. Change the goal β†’ regenerate the plan β†’ new Money Moves.

Goal progress​

Progress is tracked implicitly through completed Money Move tasks and transactions. There is no separate "progress" endpoint β€” the chat coach and plan reflect current progress based on the accumulated data.

Recommendations for integrators​

  • Always create a goal after financial intake and plan generation β€” the plan needs income/expenses to compute a realistic timeline.
  • If your onboarding flow captures goal info upfront, batch it: create user β†’ submit intake β†’ create goal β†’ generate plan.
  • You can update a goal by calling POST /goals again β€” it replaces the active goal.

β†’ See Goals API Reference