Data and research

Stripe

A Stripe integration connects a customer's Stripe account to Mobius through Stripe Apps OAuth so loops can read and update customers, inspect payments and billing objects, create invoices and refunds, and react to Stripe account events.

Use Stripe when a run needs current billing context, when support or success flows should update Stripe records, or when a payment or subscription event should start a durable run. This connector is separate from Mobius's own Stripe billing configuration.

Capability map

CapabilityValue
Provider IDstripe
Auth kindoauth2_user
Connect flowStripe Apps OAuth
ActionsYes
EventsYes
Webhook deliveryYes
Event samplesNo
Live statusYes

Connect Stripe

SurfaceSupport
AppOpen Govern > Integrations, choose Stripe, then continue through Stripe OAuth and choose the account to authorize.
CLIThe mobius CLI does not connect Stripe integrations yet. Use the app or API.
APICall POST /v1/projects/{project}/integrations/providers/stripe/connect with an empty JSON body, then redirect the user to the returned Stripe OAuth URL.
curl -X POST \
  "$MOBIUS_API_URL/v1/projects/platform/integrations/providers/stripe/connect" \
  -H "Authorization: Bearer $MOBIUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"default"}'

The connect call returns a redirect_url. Send the browser there to install the Mobius Stripe app. Stripe redirects back to Mobius, then Mobius stores the account ID plus OAuth access and refresh tokens for the project.

Set the Stripe app redirect URI to:

{STRIPE_INTEGRATION_APP_BASE_URL}/v1/provider/stripe/callback

STRIPE_INTEGRATION_APP_BASE_URL defaults to API_BASE_URL, then APP_BASE_URL. In production this should be the API origin, for example https://api.mobiusops.ai.

Deployment configuration

Use the STRIPE_INTEGRATION_* variables for customer Stripe accounts. Do not reuse the STRIPE_* billing variables.

STRIPE_INTEGRATION_CLIENT_ID=
STRIPE_INTEGRATION_SECRET_KEY=
STRIPE_INTEGRATION_APP_BASE_URL=
STRIPE_INTEGRATION_SIGNING_SECRET=
STRIPE_INTEGRATION_WEBHOOK_SECRET=

STRIPE_INTEGRATION_CLIENT_ID and STRIPE_INTEGRATION_SECRET_KEY enable the OAuth connect button. STRIPE_INTEGRATION_SIGNING_SECRET signs Mobius OAuth state. If it is empty, Mobius uses the Stripe integration secret key. Set STRIPE_INTEGRATION_WEBHOOK_SECRET to the signing secret from the Stripe event destination so Mobius can verify Stripe-Signature headers.

The Stripe app manifest needs permissions for the objects Mobius actions read or write. Start with these object permissions, then add event permissions for each event type you subscribe to:

connected_account_read
customer_read
customer_write
payment_intent_read
invoice_read
invoice_write
subscription_read
charge_read
charge_write
event_read

Stripe may reject an action if the installed app lacks the matching permission. Review the exact manifest permissions in Stripe before shipping a new action set.

Actions

stripe.customer.list
stripe.customer.get
stripe.customer.create
stripe.customer.update
stripe.payment_intent.list
stripe.payment_intent.get
stripe.invoice.list
stripe.invoice.get
stripe.invoice.create
stripe.subscription.list
stripe.subscription.get
stripe.refund.create

Use stripe.customer.list to search customers before writing. Use stable IDs from read actions when creating invoices or refunds.

Create a customer:

{
  "email": "ada@example.com",
  "name": "Ada Lovelace",
  "metadata": {
    "source": "mobius"
  },
  "idempotency_key": "customer-ada-example"
}

List payment intents for a customer:

{
  "customer_id": "cus_123",
  "limit": 25
}

Create a draft invoice:

{
  "customer_id": "cus_123",
  "description": "Usage review follow-up",
  "collection_method": "send_invoice",
  "days_until_due": 14,
  "idempotency_key": "invoice-cus-123-2026-06"
}

Create a refund:

{
  "payment_intent_id": "pi_123",
  "amount": 5000,
  "reason": "requested_by_customer",
  "idempotency_key": "refund-pi-123-support-case-456"
}

stripe.customer.create, stripe.invoice.create, and stripe.refund.create mutate upstream state. Provide a stable idempotency_key when a retry could repeat the write, and add an interaction before high-impact refunds or invoice changes.

Events

Stripe event callbacks become provider events with the stripe. prefix. Mobius verifies the signature, matches the event's account ID to the connected integration, persists the canonical integration event, and fans it out as a source event for triggers and waiting runs.

stripe.account.application.deauthorized
stripe.charge.failed
stripe.charge.refunded
stripe.charge.succeeded
stripe.charge.dispute.created
stripe.checkout.session.completed
stripe.checkout.session.expired
stripe.customer.created
stripe.customer.deleted
stripe.customer.updated
stripe.customer.subscription.created
stripe.customer.subscription.deleted
stripe.customer.subscription.paused
stripe.customer.subscription.resumed
stripe.customer.subscription.trial_will_end
stripe.customer.subscription.updated
stripe.invoice.created
stripe.invoice.deleted
stripe.invoice.finalized
stripe.invoice.marked_uncollectible
stripe.invoice.paid
stripe.invoice.payment_failed
stripe.invoice.payment_succeeded
stripe.invoice.sent
stripe.invoice.upcoming
stripe.invoice.updated
stripe.invoice.voided
stripe.payment_intent.amount_capturable_updated
stripe.payment_intent.canceled
stripe.payment_intent.created
stripe.payment_intent.payment_failed
stripe.payment_intent.requires_action
stripe.payment_intent.succeeded
stripe.refund.created
stripe.refund.failed
stripe.refund.updated

Each event payload includes the Stripe event ID, upstream event type, connected account ID, created timestamp, live mode flag, changed object ID and type, the object under data, any previous_attributes, and the original Stripe event under raw.

Set up webhook delivery

Create a Stripe event destination or webhook endpoint that sends selected account events to:

{STRIPE_INTEGRATION_APP_BASE_URL}/v1/provider/stripe/webhook/events

Copy the endpoint's signing secret into STRIPE_INTEGRATION_WEBHOOK_SECRET. Mobius accepts callbacks only when the Stripe-Signature timestamp is within five minutes and the HMAC matches the raw request body.

Connect each Stripe account in Mobius before expecting events from that account. If Stripe delivers an event for an account that is not connected to a project, Mobius returns 404 and does not emit a source event.

Next