Discord trigger — Inbound preview

Trigger Stripe Workflow from Discord commands

Use Discord as a control plane for Stripe. A slash command or specific message fires a Stripe Workflow — refunds, credits, plan changes, on demand from the channel.

Inbound is in early access — join the waitlist for early invites.

The problem

It sounds niche until you see it in practice. Small teams already use Discord as a half-baked ops console — someone types ! refund cu_abc123 in a channel and a human reads it, switches to the Stripe Dashboard, and runs the refund by hand. The teams that want to trigger stripe workflow from discord properly today build a custom Discord bot with discord.js, host it themselves, wire it to the Stripe API, and maintain it. That's a lot of code for a few slash commands.

Inbound's Discord trigger gives you the bot and the receiver for free. Register a slash command (/refund, /credit, /upgrade), tie it to an inbound webhook, and the command's arguments land as a signed Stripe Workflow trigger. The workflow does the rest — runs the refund, posts the confirmation back to the channel, logs to Postgres, files a Linear issue if it failed. Discord becomes a legitimate, audited control plane. Inbound is pre-launch — join the waitlist below.

How trigger stripe workflow from discord works

  1. 1

    Register a Discord slash command

    When Inbound ships, the dashboard will walk you through registering a slash command in your Discord app (e.g., /refund charge:CHARGE_ID reason:REASON). Discord enforces argument types — strings, integers, choices, user mentions.
  2. 2

    Wire the interaction endpoint

    Discord interactions hit Inbound's signed endpoint. Inbound verifies Discord's Ed25519 signature on every interaction (Discord requires this), dedupes on the interaction id, and triggers the matched workflow.
  3. 3

    Authorize who can fire what

    The trigger payload includes the invoking Discord user, the role list, and the channel. The workflow filter step gates on role (only Ops can /refund) or channel (only #ops-private can run /credit). Anyone else gets a polite rejection back in Discord.
  4. 4

    Reply from the workflow

    Discord interactions expect a response. The workflow can ack immediately (ephemeral 'processing...') and follow up with the result. The follow-up posts back to the same channel via the Discord action — full round-trip inside one Stripe Workflow.
# Inbound webhook config (preview)
trigger:
  source: inbound.discord
  application_id: "123456789012345678"
  command: refund
workflow:
  filter:
    role: ops
    channel: "#refunds"
  - action: stripe.refund.create
    charge: "{{ options.charge }}"
    reason: "{{ options.reason }}"
  - action: outbound.discord
    webhook_url: "{{ channel.webhook_url }}"
    content: |
      <@{{ user.id }}> refund processed
      charge: {{ options.charge }}
      amount: ${{ stripe.refund.amount / 100 }}

Example workflow configuration

Mock-up of the Discord inbound trigger config inside the Stripe Dashboard. Shows a Discord application connection card, an Ed25519 public key field, a slash-command registration helper with copy-pasteable command JSON, a per-command workflow mapping table, and a recent-interactions log showing slash commands, the invoking user, and the workflow outcome.

Inbound (pre-launch): Discord slash commands become signed, role-gated, audited Stripe Workflow triggers.

Outbound vs Zapier

OutboundZapier
Lives inside the Stripe Dashboard
Pricing modelBundled with Outbound$29.99/mo + per-task fees
Discord Ed25519 signature verifiedlimited
Role + channel gating built-in
Setup time≈10 minutes (when live)Hours, mostly Discord bot setup
Direct chaining into Stripe + Outbound actionsvia a multi-step zap
Available todayPre-launch — join waitlisttrue

Frequently asked questions

Isn't this a security risk — running Stripe refunds from a chat?+
Only if you wire it that way. Inbound surfaces the invoking Discord user and roles; the workflow filter step is where you enforce who can do what. Pair with a #ops-private channel, a role check, and an amount cap and you have an audited path that's safer than someone clicking through the Dashboard by hand.
How does Discord interaction signing work?+
Discord signs every interaction with Ed25519. Discord requires the receiver to verify the signature on the raw body within a tight timeout (3 seconds) or it fails the interaction. Inbound handles the verification and the ack-then-followup pattern internally; the workflow just sees a clean, verified payload.
Can the same trigger handle multiple slash commands?+
Yes. One Inbound endpoint receives every interaction from your Discord app. The workflow filter step branches on options.command (or you provision one trigger per command — both patterns work). Most teams start with one workflow per command for cleaner audit logs.
What about button interactions and modals?+
v1 supports slash commands. Buttons and modals (Discord's interactive components) are on the Pro roadmap because they need a stateful interaction flow — Outbound has the primitives, we just want to ship the slash command flow first and get feedback. Sign up for the waitlist for early access.
Is this really used in production, or is it a curiosity?+
A small but real set of indie SaaS teams run their entire ops console out of Discord. They don't want to onboard non-engineers into a Stripe Dashboard role; they don't want to build an internal admin UI. A signed, audited Discord slash command hits the sweet spot for them. That's who this is built for.

Be first when Inbound ships