Stripe

Your Stripe account, in two nodes on one connected credential. The action runs 44 operations — customers, payments and refunds, subscriptions and invoices, products and prices, Payment Links and Checkout — and can also be an AI toolkit. The trigger fires a flow when a payment succeeds or fails, a refund or a dispute happens, a subscription or an invoice changes, or a Checkout completes.

Setup

Connect Stripe under Settings → Credentials, or straight from the node: name the credential, pick Test mode or Live mode, and install the HostWebhook app on your Stripe account. Nothing is picked for you — live and test are separate credentials, and each one only sees its own mode's data. Build and test with a test-mode credential; nothing it does moves real money.

The app asks Stripe for exactly what the nodes use: read and write on customers, payments, charges and refunds, subscriptions, invoices, products and prices, Payment Links and Checkout Sessions; read on disputes, payment methods and the balance; and events, for the trigger. Uninstalling the app in Stripe stops both nodes; reconnecting the credential reinstalls it.

ℹAmounts are in the currency's smallest unit, as in Stripe's API: 1999 is 19.99 USD, 500 is 500 JPY. The node shows what the number means under the field, and rejects 19.99 instead of charging 19 cents.

Operations

Customers

ValueIn the dropdownWhat it does
createCustomerCreate customerCreates a customer with an email, a name and whatever else you know about them.
getCustomerGet customerOne customer by ID: email, name, balance, default payment method and metadata.
updateCustomerUpdate customerChanges the fields you fill in; empty fields stay as they are.
deleteCustomerDelete customerDeletes the customer for good and cancels their active subscriptions. It can't be undone.
listCustomersList customersCustomers, newest first — all of them, or the ones with an exact email. Iterable over customers.

Payments & refunds

ValueIn the dropdownWhat it does
createPaymentIntentCreate paymentCreates a PaymentIntent for an amount. Confirm it here with a saved payment method to charge right away, or confirm it later from your checkout.
getPaymentIntentGet paymentOne PaymentIntent by ID: amount, status, customer and the latest charge.
capturePaymentIntentCapture paymentCaptures a payment that was only authorized (manual capture). Moves money.
cancelPaymentIntentCancel paymentCancels a payment that hasn't been charged yet (or releases an authorization).
listPaymentIntentsList paymentsPaymentIntents, newest first — all, or one customer's. Iterable over paymentIntents.
getChargeGet chargeOne charge by ID: amount, status, card brand and last 4, receipt URL, refunded amount.
listChargesList chargesCharges, newest first — all, one customer's, or one payment's. Iterable over charges.
createRefundRefund paymentRefunds a payment, whole or in part. Moves money back to the customer; it can't be undone.
getRefundGet refundOne refund by ID: amount, status and the payment it belongs to.
listRefundsList refundsRefunds, newest first — all, or one payment's. Iterable over refunds.
getBalanceGet balanceWhat's available and what's still pending in the account, per currency.

Subscriptions

ValueIn the dropdownWhat it does
createSubscriptionCreate subscriptionSubscribes a customer to a recurring price. Stripe charges the default payment method, or emails an invoice.
getSubscriptionGet subscriptionOne subscription by ID: status, price, current period and whether it cancels at the end.
updateSubscriptionUpdate subscriptionChanges the price or quantity, or schedules the cancellation for the end of the period. Empty fields stay as they are.
cancelSubscriptionCancel subscriptionCancels a subscription now, or at the end of the period the customer already paid for.
listSubscriptionsList subscriptionsSubscriptions, newest first — filtered by customer, price or status. Iterable over subscriptions.

Invoices

ValueIn the dropdownWhat it does
createInvoiceCreate invoiceCreates a draft invoice for a customer. Add items to it, then finalize and send it.
addInvoiceItemAdd invoice itemAdds a line to a draft invoice — a price from your catalog, or an amount with a description. Without an invoice, it waits for the customer's next one.
finalizeInvoiceFinalize invoiceTurns a draft into an open invoice with its number. After this it can be sent or paid, not edited.
sendInvoiceSend invoiceEmails an open invoice to the customer with a link to pay it.
payInvoicePay invoiceCharges an open invoice now with the customer's payment method — or marks it as paid outside Stripe. Moves money.
voidInvoiceVoid invoiceVoids an open invoice: it stays on record but can no longer be paid. It can't be undone.
getInvoiceGet invoiceOne invoice by ID: number, status, amounts, lines, and the links to pay it and to its PDF.
listInvoicesList invoicesInvoices, newest first — filtered by customer, subscription or status. Iterable over invoices.

Products & prices

ValueIn the dropdownWhat it does
createProductCreate productAdds a product to your catalog. Give it a price with Create price.
getProductGet productOne product by ID: name, description, whether it's active, and its default price.
updateProductUpdate productChanges the name, the description or the metadata. Empty fields stay as they are.
archiveProductArchive productHides a product so it can't be bought anymore. Existing subscriptions keep working; it can be reactivated in Stripe.
listProductsList productsProducts in your catalog, newest first. Iterable over products.
createPriceCreate priceAdds a price to a product — one-time, or recurring every day, week, month or year.
getPriceGet priceOne price by ID: amount, currency, how often it bills and its product.
listPricesList pricesPrices, newest first — all, or one product's. Iterable over prices.
ValueIn the dropdownWhat it does
createPaymentLinkCreate payment linkA shareable link to a Stripe-hosted page that sells a price. The link comes back in the output.
getPaymentLinkGet payment linkOne Payment Link by ID: its URL and whether it's still active.
deactivatePaymentLinkDeactivate payment linkTurns a Payment Link off: whoever opens it can't pay anymore. It can be turned back on in Stripe.

Checkout

ValueIn the dropdownWhat it does
createCheckoutSessionCreate checkout sessionA Stripe-hosted checkout page for a price, valid for 24 hours. Send the customer to the URL that comes back.
getCheckoutSessionGet checkout sessionOne Checkout Session by ID: status, payment status, customer, amount and its line items.
expireCheckoutSessionExpire checkout sessionCloses an open Checkout Session so nobody can pay with it anymore.
listCheckoutSessionsList checkout sessionsCheckout Sessions, newest first — all, one customer's, or by status. Iterable over checkoutSessions.

IDs go as Stripe writes them (cus_…, pi_…, in_…) or from the payload ({{payload.object.customer}}). Price is picked from the account's active prices, with a price ID or a template as the alternative. The output keeps Stripe's own field names, so its API reference applies as it is; lists come back as { customers: [...], count, hasMore } and the next node runs once per item.

⚠What moves money runs for real. Refunding, capturing or canceling a payment, paying or voiding an invoice, canceling a subscription, deleting a customer, archiving a product, deactivating a Payment Link and expiring a Checkout Session can't be undone — and Run Test does them too. Every write carries an idempotency key built from the node and the event, so a retry of the same event doesn't charge or refund twice.

Changing a subscription's price

Update subscription with a new price or quantity changes the subscription's own line, so the customer keeps paying for one thing. It only works on single-item subscriptions; with more than one line the node stops and says so instead of adding another.


AI toolkit mode

Once the credential is picked, the node asks for a Mode. AI toolkit turns it into 44 tools that an AI Node — or an MCP client, through one of your MCP servers — calls by name: a billing assistant that looks up a customer's payments and invoices, sends a Payment Link or opens a Checkout.

ToolArguments
create_stripe_customeremail? · name? · phone? · description? · metadata?
get_stripe_customercustomer_id
update_stripe_customercustomer_id · email? · name? · phone? · description? · metadata?
delete_stripe_customercustomer_id — blocked by default
list_stripe_customersemail? · created_after? · limit?
create_stripe_paymentamount · currency · customer_id? · description? · receipt_email? · payment_method_id? · confirm? · capture_method? · metadata? — blocked by default
get_stripe_paymentpayment_intent_id
capture_stripe_paymentpayment_intent_id · amount_to_capture? — blocked by default
cancel_stripe_paymentpayment_intent_id · cancellation_reason? — blocked by default
list_stripe_paymentscustomer_id? · created_after? · limit?
get_stripe_chargecharge_id
list_stripe_chargescustomer_id? · payment_intent_id? · created_after? · limit?
refund_stripe_paymentpayment_intent_id? · charge_id? · amount? · reason? · metadata? — blocked by default
get_stripe_refundrefund_id
list_stripe_refundspayment_intent_id? · created_after? · limit?
get_stripe_balance—
create_stripe_subscriptioncustomer_id · price_id · quantity? · trial_days? · collection_method? · days_until_due? · metadata?
get_stripe_subscriptionsubscription_id
update_stripe_subscriptionsubscription_id · price_id? · quantity? · cancel_at_period_end? · proration_behavior? · metadata?
cancel_stripe_subscriptionsubscription_id · when — blocked by default
list_stripe_subscriptionscustomer_id? · price_id? · status? · limit?
create_stripe_invoicecustomer_id · description? · collection_method? · days_until_due? · include_pending_items? · metadata?
add_stripe_invoice_itemcustomer_id · invoice_id? · price_id? · amount? · currency? · description? · quantity? · metadata?
finalize_stripe_invoiceinvoice_id
send_stripe_invoiceinvoice_id
pay_stripe_invoiceinvoice_id · paid_out_of_band? — blocked by default
void_stripe_invoiceinvoice_id — blocked by default
get_stripe_invoiceinvoice_id
list_stripe_invoicescustomer_id? · subscription_id? · status? · created_after? · limit?
create_stripe_productname · description? · metadata?
get_stripe_productproduct_id
update_stripe_productproduct_id · name? · description? · metadata?
archive_stripe_productproduct_id — blocked by default
list_stripe_productsactive? · limit?
create_stripe_priceproduct_id · unit_amount · currency · recurring · interval_count? · nickname? · lookup_key? · metadata?
get_stripe_priceprice_id
list_stripe_pricesproduct_id? · active? · limit?
create_stripe_payment_linkprice_id · quantity? · after_completion_url? · allow_promotion_codes? · metadata?
get_stripe_payment_linkpayment_link_id
deactivate_stripe_payment_linkpayment_link_id — blocked by default
create_stripe_checkout_sessionmode · price_id · quantity? · success_url · cancel_url? · customer_id? · customer_email? · client_reference_id? · metadata?
get_stripe_checkout_sessioncheckout_session_id
expire_stripe_checkout_sessioncheckout_session_id — blocked by default
list_stripe_checkout_sessionscustomer_id? · status? · created_after? · limit?

What you control

  • Blocked tools. The eleven that move money or can't be undone start blocked. Unblock only what the agent really needs, under Block these tool calls.
  • Characters per call sent to the model. 20,000 by default, anything from 1,000 to 200,000.

What goes back to the model

The same response as the operation. Lists return 20 unless the model asks for more, up to 100 — the model decides; a limit set in Single operation doesn't count in toolkit mode. Items that don't fit the characters limit are left out whole, with a notes field saying how many. Arguments are used as written: a {{payload.x}} the model writes is not resolved against the flow.

Testing a tool

⚠Only a tool call picks the tool. In AI toolkit mode, only an AI Node, an MCP client or a voice agent chooses which tool the node runs. Run Test, a flow or a webhook run the operation saved on the node: an operation in their payload that names another tool is refused.
✦To try a tool, call it from an AI Node or from an MCP client. Its arguments look like this:
jsonA tool call
{ "operation": "list_stripe_customers", "email": "sam.rivera@example.com" }
⚠A node in toolkit mode is not part of the pipeline. Events arriving through connections made before you switched are refused — the node only runs the tool it is asked for.

The trigger

Pick Stripe as the service on a Trigger node and a Stripe credential. Installing the HostWebhook app already sends the account's events to HostWebhook, so activating changes nothing in Stripe and never expires: the trigger simply starts picking the events you chose, for that account and that mode. To listen to live and test, add one trigger per credential.

What fires it

Event Trigger takes one or more; pick at least one. Changing them while the trigger is active counts from the next event, with nothing to apply.

PaymentstypeWhen
Payment succeededpayment_intent.succeededA payment was completed and the money is captured.
Payment failedpayment_intent.payment_failedA payment attempt failed — declined card, failed authentication…
Payment canceledpayment_intent.canceledA payment was canceled before it completed.
Payment needs the customerpayment_intent.requires_actionThe customer has to do something, like 3D Secure, to finish paying.
Payment authorized, waiting for capturepayment_intent.amount_capturable_updatedA payment with manual capture was authorized and can be captured now.
Charges and refundstypeWhen
Charge succeededcharge.succeededA charge went through.
Charge failedcharge.failedA charge attempt failed.
Charge capturedcharge.capturedAn authorized charge was captured.
Charge refundedcharge.refundedA charge was refunded, fully or in part.
Refund createdrefund.createdA refund was created.
Refund updatedrefund.updatedA refund changed — its status or its metadata.
Refund failedrefund.failedA refund could not be sent to the customer.
DisputestypeWhen
Dispute openedcharge.dispute.createdA customer disputed a charge with their bank.
Dispute updatedcharge.dispute.updatedA dispute changed — new evidence, a new status.
Dispute closedcharge.dispute.closedA dispute was won, lost or accepted.
CheckouttypeWhen
Checkout completedcheckout.session.completedA customer finished a Checkout Session or a Payment Link.
Checkout expiredcheckout.session.expiredA Checkout Session expired without being completed.
Delayed payment succeededcheckout.session.async_payment_succeededA Checkout payment that settles later (bank debit, transfer) went through.
Delayed payment failedcheckout.session.async_payment_failedA Checkout payment that settles later (bank debit, transfer) failed.
CustomerstypeWhen
Customer createdcustomer.createdA new customer was created.
Customer updatedcustomer.updatedA customer changed — email, name, address, metadata…
Customer deletedcustomer.deletedA customer was deleted.
SubscriptionstypeWhen
Subscription createdcustomer.subscription.createdA customer subscribed.
Subscription updatedcustomer.subscription.updatedA subscription changed — plan, quantity, status, renewal…
Subscription endedcustomer.subscription.deletedA subscription was canceled and has ended.
Trial ends in 3 dayscustomer.subscription.trial_will_endA trial ends in three days.
Subscription pausedcustomer.subscription.pausedA subscription was paused.
Subscription resumedcustomer.subscription.resumedA paused subscription was resumed.
InvoicestypeWhen
Invoice createdinvoice.createdA new invoice was created, as a draft.
Invoice finalizedinvoice.finalizedA draft invoice was finalized and can be paid.
Invoice sentinvoice.sentAn invoice was emailed to the customer.
Invoice paidinvoice.paidAn invoice was paid, or marked as paid.
Invoice payment failedinvoice.payment_failedAn attempt to pay an invoice failed.
Invoice needs the customerinvoice.payment_action_requiredPaying the invoice needs the customer to authenticate.
Invoice coming upinvoice.upcomingA subscription invoice will be created soon (days before renewal).
Invoice voidedinvoice.voidedAn invoice was voided.
Invoice uncollectibleinvoice.marked_uncollectibleAn invoice was marked as uncollectible.
ProductstypeWhen
Product createdproduct.createdA product was created.
Product updatedproduct.updatedA product changed — name, description, archived…
Product deletedproduct.deletedA product was deleted.
PricestypeWhen
Price createdprice.createdA price was created.
Price updatedprice.updatedA price changed — nickname, archived…
Price deletedprice.deletedA price was deleted.
Payment LinkstypeWhen
Payment Link createdpayment_link.createdA Payment Link was created.
Payment Link updatedpayment_link.updatedA Payment Link changed — activated, deactivated…

What the trigger sends downstream

The Stripe event, one level flatter, with the object exactly as Stripe sends it — same field names, amounts in the smallest unit. On *.updated events, previousAttributes holds what changed:

{
  "id": "evt_1QZ…",
  "type": "invoice.paid",
  "label": "Invoice paid",
  "createdAt": "2026-10-08T17:02:11.000Z",
  "livemode": false,
  "accountId": "acct_1Q…",
  "objectType": "invoice",
  "objectId": "in_1QZ…",
  "object": {
    "id": "in_1QZ…",
    "object": "invoice",
    "number": "ZZ-0001",
    "customer": "cus_Q…",
    "customer_email": "sam.rivera@example.com",
    "status": "paid",
    "amount_paid": 1500,
    "currency": "usd",
    "hosted_invoice_url": "https://invoice.stripe.com/i/…",
    "…": "…"
  },
  "apiVersion": "2024-06-20"
}
ℹEach event runs once. Stripe resends an event it couldn't deliver; HostWebhook recognises its id and doesn't run the flow again. Events arrive signed, and HostWebhook checks the signature before anything runs.

Trying it out

The trigger's Test push shows what each event you picked will look like — examples with the exact shape this trigger dispatches, so you can write {{payload.object.amount}} in the nodes below it from the start. To see a real one with a test-mode credential, make a test payment in Stripe (card 4242 4242 4242 4242) or run stripe trigger payment_intent.succeeded with the Stripe CLI on that account.


Gotchas

  • Live and test don't mix. A test-mode credential can't see live customers or prices, and the other way round — IDs from one mode don't exist in the other.
  • Confirming a payment needs a saved payment method. With Confirm now, the node charges pm_… right away, without the customer present; without it, the payment waits for your checkout to confirm it.
  • A 429 is retried once, after the wait Stripe asks for (up to 10 s), with the same idempotency key.
  • Declined cards come back as the node's error with Stripe's reason, like (insufficient_funds), so the flow can branch on failure.
  • Uninstalling the app stops the trigger. It turns off and says why; reconnect the credential and activate it again.