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

# Macropay for Slack

> Pipe live payments, refunds, disputes and a daily revenue digest straight into Slack — no dashboard tab required.

Your revenue shouldn't live behind a login. The Slack integration streams
Macropay's money-moving events — captures, declines, refunds, chargebacks — into
the channel your team already watches, and drops a once-a-day revenue card so the
whole room starts the morning on the same number. As your Merchant of Record,
Macropay is already remitting sales tax and VAT on every order below; Slack just
makes the resulting cash flow visible the moment it happens.

<Note>
  Each Macropay organization posts to **one** Slack channel. Running several orgs
  out of the same workspace? Repeat the connect flow from each org's dashboard
  and point each at its own channel.
</Note>

## What you get

<CardGroup cols={2}>
  <Card title="Live money events" icon="bolt">
    Every successful charge, decline, refund and dispute lands in-channel as it
    happens — shared context, no polling.
  </Card>

  <Card title="Morning revenue digest" icon="sun">
    One Block Kit card a day with revenue, MRR, churn and net-new customers.
  </Card>

  <Card title="Slash commands" icon="terminal">
    Type `/macropay mrr` from anywhere and get a private answer in seconds.
  </Card>

  <Card title="Dispute early-warning" icon="shield">
    Chargebacks post the instant they open, with the response deadline attached.
  </Card>
</CardGroup>

## Connect Slack

<Steps>
  <Step title="Open the Slack settings">
    In the dashboard, head to **Settings → Integrations → Slack** for the
    organization you want to wire up.

    Direct URL:
    `https://macropay.ai/dashboard/<org-slug>/settings/integrations/slack`
  </Step>

  <Step title="Authorize the workspace">
    Click **Connect Slack** and approve on Slack's consent screen. Macropay asks
    only for the scopes it actually uses — `chat:write`, `incoming-webhook`, and
    `commands` (for the `/macropay` slash command). No message-history access is
    requested.
  </Step>

  <Step title="Choose the destination channel">
    Slack asks which channel to post into. Pick any public or private channel —
    Macropay writes only to the one you select here at install time.

    You'll bounce back to the dashboard with a confirmation toast.
  </Step>

  <Step title="Pick your events and test">
    All event types are on by default. Switch off anything you don't want (say,
    keep payments and disputes but mute new-customer pings), then hit
    **Send test message** to confirm the channel is live before you move on.
  </Step>
</Steps>

## Events that post

Each event arrives as a Block Kit card whose key fields deep-link back to the
matching dashboard record, so one click takes you from "what happened" to the
full order.

| Event               | Trigger                                  | Card highlights                                    |
| ------------------- | ---------------------------------------- | -------------------------------------------------- |
| `payment_succeeded` | A payment is captured                    | Amount, customer email, product, link to the order |
| `payment_failed`    | A charge is declined                     | Amount, customer email, decline reason, retry hint |
| `refund_created`    | A refund is issued (manual or automated) | Amount, original order, refund reason              |
| `dispute_created`   | A chargeback or pre-dispute opens        | Amount, reason code, response deadline             |
| `customer_created`  | A new customer record is created         | Email, country, signup channel                     |

<Frame>
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/macrodeepinc/assets/features/integrations/slack/payment-succeeded.png" alt="Payment succeeded card in Slack" />
</Frame>

<Note type="info">
  Notifications are strictly fire-and-forget. If Slack is unreachable or the bot
  gets kicked from the channel, checkout, payouts and webhooks all keep running —
  the post is dropped with a structured log line and nothing in your billing path
  blocks on it.
</Note>

## The daily revenue digest

Once a day — at the hour you set, defaulting to **09:00 UTC** — Macropay posts a
single summary card:

* Revenue today, with the delta against yesterday
* MRR, with a 30-day delta
* 30-day churn percentage
* Net-new customers today and across the last 30 days
* A 7-day revenue sparkline

Tune the hour under **Settings → Integrations → Slack → Daily summary**, or turn
the digest off entirely if you'd rather stick to event-driven posts.

## Slash commands

Ask for a number without leaving the keyboard. Slash commands work in any
channel — the bot only needs to be a channel member to *post notifications*, not
to *answer commands*.

| Command                     | Returns                                     |
| --------------------------- | ------------------------------------------- |
| `/macropay revenue today`   | Today's revenue, with a delta vs. yesterday |
| `/macropay revenue 7d`      | Last 7 days summed, plus the daily average  |
| `/macropay revenue 30d`     | The trailing 30-day window                  |
| `/macropay mrr`             | Current MRR plus a 30-day delta             |
| `/macropay churn`           | 30-day churn percentage                     |
| `/macropay customers today` | Net-new customers today                     |
| `/macropay customers 30d`   | Net-new customers over the last 30 days     |
| `/macropay help`            | The full command list                       |

<Note>
  Answers are **ephemeral** — only the person who ran the command sees them. That
  way a quick revenue check in a busy public channel doesn't broadcast your
  numbers to everyone scrolling by.
</Note>

## Want more than one channel?

The Slack app posts to a single channel per organization. For fan-out — routing
the same events to several channels, a data warehouse, or a custom alert format —
send Macropay events through a [webhook endpoint](/integrate/webhooks/endpoints)
and forward them wherever you like. The same pattern fits AI and agent billing:
pipe `meter`, signal, or order events to your own service and post enriched
agent-ROI cards back into Slack on your terms.

## Troubleshooting

<AccordionGroup>
  <Accordion title="The bot isn't posting in my channel">
    Slack silently drops posts when the bot isn't a member of the target channel.
    From inside that channel, run:

    ```
    /invite @Macropay
    ```

    Then fire a **Send test message** from the dashboard to confirm.
  </Accordion>

  <Accordion title="I picked the wrong channel at install">
    Go to **Settings → Integrations → Slack → Disconnect**, run the connect flow
    again, and select the correct channel on Slack's consent screen.
  </Accordion>

  <Accordion title="A slash command returns 'dispatch_failed'">
    This almost always means the Slack request signature failed to validate —
    usually after a disconnect/reconnect issued a new signing secret. Disconnect
    and reconnect once more so the current secret takes effect.
  </Accordion>

  <Accordion title="I need notifications in several channels">
    It's one channel per organization today. To fan out, route the same events
    through a [webhook endpoint](/integrate/webhooks/endpoints) and post to the
    extra channels yourself.
  </Accordion>
</AccordionGroup>

## FAQ

<AccordionGroup>
  <Accordion title="Can I change the card layout?">
    Not yet — the cards are tuned to stay scannable in a noisy channel. For
    custom formatting or routing, build on Macropay
    [webhooks](/integrate/webhooks/endpoints) instead.
  </Accordion>

  <Accordion title="Can the bot read my Slack messages?">
    No. It holds `chat:write` (post to the chosen channel) and `commands` (handle
    `/macropay`) only. Without `channels:history`, it can't see any prior
    messages.
  </Accordion>

  <Accordion title="How do I disconnect?">
    From **Settings → Integrations → Slack → Disconnect**, or remove the Macropay
    app in your Slack workspace settings. Either side severs the link cleanly.
  </Accordion>

  <Accordion title="Are queued notifications kept while I'm disconnected?">
    No. Reconnecting opens a fresh subscription — Macropay doesn't backfill events
    from the window you were disconnected.
  </Accordion>
</AccordionGroup>
