Skip to content

Bank (Slash)

Live integration with your Slash bank account. Card swipes, deposits, and withdrawals show up in your treasurer channel within seconds via webhook. The bot also keeps a local Mongo mirror of every transaction so analytics queries are fast.

/balance

Current Slash account balance(s).

Usage: /balance

For debit accounts, shows one balance. For charge cards, shows both cash and credit balances.

Output: non-ephemeral. Includes account name, last 4 of account number, available + posted amounts, and the timestamp Slash computed them at.


/spending

Outflows for a window, MCC-categorized.

Usage: /spending [window]

Argument Required Description
window no Past 7 days / Past 30 days / Current semester / Year to date (default: month)

Output: total out, net change, breakdown by MCC category (Food, Gas, Restaurants, Bars, Utilities, etc.). Categories come from the bot's MCC mapping.


/income

Inflows for the same window options as /spending.

Usage: /income [window]


/card_spending

Card-only outflows.

Usage: /card_spending [window] [card_id]

Argument Required Description
window no Same as /spending
card_id no Slash card ID (omit for all cards)

/charges

Browse card transactions with a tap-to-drill-down dropdown.

Usage: /charges [window] [purchased_by] [category] [unreceipted]

Argument Required Description
window no Past 7 days / Past 30 days / Current semester
purchased_by no Filter to charges marked as purchased by this brother
category no Filter by MCC category (e.g. "Food", "Gas")
unreceipted no true to show only charges still missing a receipt

Output: paginated embed with prev/next buttons. Each row shows amount, merchant, category, 📎 (receipt attached) or ✏️ (annotated) markers. Below the embed: a select menu listing the same 10 charges — pick one to see the drill-down view (full detail, receipt image inline if attached).

The drill-down also sends a follow-up plain-text message containing just the txn ID so you can copy-paste it on mobile without fighting the embed format.


/txn

Full detail for a single Slash transaction.

Usage: /txn <transaction_id>

If the transaction isn't yet in the local mirror, the bot fetches it live from Slash and caches it.

Output: ephemeral. Shows amount, status, MCC category, location (city/state/zip/country), card holder, both Slash's memo and our memo, purchased-by, receipt.


/annotate_txn

Add a memo and/or "purchased by" to a Slash transaction. The memo is also pushed to the Slash dashboard's note field via PATCH /transaction/{id}/note.

Usage: /annotate_txn <transaction_id> [memo] [purchased_by] [purchased_by_freeform]

Argument Required Description
transaction_id yes Slash transaction ID
memo no Free-text context
purchased_by no Mention a brother who actually made the purchase
purchased_by_freeform no Freeform name if not a brother (e.g. "national chapter rep")

At least one of memo / purchased_by / purchased_by_freeform must be supplied.

Why "purchased by" matters: the cardholder ≠ purchaser sometimes. Joe might use the treasurer's card to buy event supplies. The card record alone misses that — purchased_by makes it explicit.

You can also annotate via the [✏️ Add Details] button on a live txn card (modal opens with current values pre-filled).


/list_cards

Live list of Slash cards (fetched from Slash) and which brothers they're linked to.

Usage: /list_cards

Each card shows its full ID in a code block (copyable for /link_card), nickname, last 4, status, holder, and link target.


Link a Slash card to a Discord brother. After linking, every transaction on that card attributes to that holder in /charges views.

Usage: /link_card <card_id> <member> <label>

Argument Required Description
card_id yes Slash card ID (from /list_cards)
member yes Brother holding the card
label yes Human label (e.g. "Treasurer's debit")

Remove the brother-link on a card.

Usage: /unlink_card <card_id>

Future transactions on that card will show as unlinked until re-linked.


/sync

Manual catch-up of Slash transactions into the local mirror. Useful when:

  • Webhook deliveries failed (Slash flipped to disabled/backing-off)
  • Bootstrapping a fresh install
  • Confirming nothing was missed before generating an /export_bank

Usage: /sync [days]

Argument Required Description
days no How far back to fetch (default: since last sync; max 365)

Live transaction cards (automatic)

Every card swipe, ACH deposit/withdrawal, wire, or RTP fires a webhook from Slash. Within ~3 seconds the bot posts a card in your treasurer channel:

  • 💳 — normal card outflow
  • 💵 — inflow (deposit, donation, refund)
  • 🚨 — outflow over ALERT_THRESHOLD_CENTS
  • 🚫 — declined
  • 🗑️ — card closed
  • 🆕 — new card issued
  • 🔄 — card status updated

Outflow cards have [✏️ Add Details] and [📎 Attach Receipt] buttons. When the transaction status changes (pending → posted), the bot edits the same message in place — no duplicate posts.