> ## Documentation Index
> Fetch the complete documentation index at: https://docs.equated.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Categorize transactions

> Clear your transaction inbox: confirm the obvious ones, decide the rest.

export const AgentChat = ({messages = []}) => <div style={{
  border: "1px solid rgba(128,128,128,0.18)",
  borderRadius: "12px",
  padding: "16px",
  background: "rgba(128,128,128,0.05)",
  display: "flex",
  flexDirection: "column",
  gap: "14px",
  fontSize: "14px",
  lineHeight: 1.5,
  color: "inherit"
}}>
    {messages.map((m, i) => m.from === "you" ? <div key={i} style={{
  alignSelf: "flex-end",
  maxWidth: "85%",
  textAlign: "right"
}}>
          <div style={{
  fontSize: "11px",
  opacity: 0.5,
  marginBottom: "3px"
}}>You</div>
          <div style={{
  display: "inline-block",
  background: "rgba(128,128,128,0.16)",
  color: "inherit",
  padding: "8px 12px",
  borderRadius: "12px 12px 2px 12px",
  whiteSpace: "pre-wrap",
  textAlign: "left"
}}>
            {m.text}
          </div>
        </div> : <div key={i} style={{
  alignSelf: "flex-start",
  maxWidth: "90%"
}}>
          <div style={{
  display: "flex",
  alignItems: "center",
  gap: "6px",
  marginBottom: "4px"
}}>
            <span style={{
  fontSize: "11px",
  opacity: 0.5
}}>Agent</span>
            {m.tool ? <span style={{
  fontSize: "11px",
  opacity: 0.6,
  background: "rgba(128,128,128,0.15)",
  borderRadius: "6px",
  padding: "1px 6px"
}}>
                used {m.tool}
              </span> : null}
          </div>
          <div style={{
  whiteSpace: "pre-wrap"
}}>{m.text}</div>
          {m.choices ? <div style={{
  display: "flex",
  flexWrap: "wrap",
  gap: "6px",
  marginTop: "10px"
}}>
              {m.choices.map((c, j) => {
  const rec = c.toLowerCase().includes("recommend");
  return <span key={j} style={{
    borderRadius: "999px",
    padding: "4px 12px",
    fontSize: "13px",
    color: "inherit",
    border: "1px solid " + (rec ? "rgba(128,128,128,0.45)" : "rgba(128,128,128,0.25)"),
    background: rec ? "rgba(128,128,128,0.12)" : "transparent",
    fontWeight: rec ? 600 : 400
  }}>
                    {c}
                  </span>;
})}
            </div> : null}
        </div>)}
  </div>;

Every bank and card transaction lands in your inbox ready to categorize. Your job is to confirm the right ones and fix the ones that aren't, so they count in your balances. You can always unconfirm and recategorize if something looks off — or delete a transaction that doesn't belong (a duplicate or stray feed entry); a confirmed one just needs unconfirming first.

## Two ways to do it

<Tabs>
  <Tab title="In the app">
    <Steps>
      <Step title="Open the inbox">
        New transactions arrive from your bank feed, ready to categorize.
      </Step>

      <Step title="Confirm the clear ones">
        Confirm transactions that are categorized correctly. They post to the ledger.
      </Step>

      <Step title="Fix the rest">
        Recategorize, split, or mark transfers on anything wrong or unclear, then confirm.
      </Step>
    </Steps>
  </Tab>

  <Tab title="With your AI">
    Ask your AI to clear the inbox with you. It posts the obvious ones and asks you about anything unclear.

    Not sure what to ask? The sparkle button in the **Transactions** header copies a ready-made prompt with your current inbox count already filled in.

    <AgentChat
      messages={[
  { from: "you", text: "Help me categorize and confirm my June transactions." },
  { from: "agent", tool: "equated", text: "Got the June inbox and your accounts. 40 transactions:\n\n• 24 Software & Subscriptions\n• 4 Advertising & Marketing\n• 6 internal transfers\n• 2 Shopify payouts\n• 4 that need your input\n\nThe first 36 look good. I'll confirm those now. You can always undo." },
  { from: "agent", tool: "equated", text: "Done. 36 confirmed. Now for the 4 unclear ones." },
  { from: "agent", text: "Txn 3592 is $26.72 interest on your Wise balance. There's no interest income account yet. What should I do?", choices: ["Create 'Interest Income'", "Use 'Other Income'", "Something else"] },
  { from: "you", text: "Create the new account." },
  { from: "agent", tool: "equated", text: "Created Interest Income and posted the $26.72 to it." },
  { from: "agent", text: "Txn 3595 is $1,210 to 'Ash' from BMO chequing, tagged as internal transfer. Is Ash your account or someone you paid?", choices: ["A contractor (expense)", "My own account", "An employee (payroll)"] },
]}
    />

    Your AI never posts the unclear ones alone. You decide; it does the work and keeps the audit trail.
  </Tab>
</Tabs>

## Why it matters

A clean inbox is what keeps every report honest. Once transactions are categorized and confirmed, your P\&L, balance sheet, and cash flow are current the moment you look.
