io.b3os/stripe 1.0.0 · payments, billing · MIT

Read your Stripe account with your own restricted key: balance, customers (list, get, search), charges, payment intents, invoices with line items, subscriptions, products, prices and events, plus triggers for new events (polled, or delivered to a webhook endpoint you add in the Stripe Dashboard). Read-only: nothing here creates, changes or refunds anything. Amounts are in the smallest currency unit (cents). Test-mode keys read test data.

Every call's result carries upstream_status and timing: validate_ms, inject_ms, render_ms, upstream_ms, map_ms and total_ms. upstream is the service's time; the others are B3OS's own (call actions). The snippets below show no timing values, because a fixture records none.

Connection

secret_key, type bearer: Stripe restricted key.

A restricted key (rk_live_ or rk_test_) with Read access to the resources the actions use (Balance, Customers, Charges, PaymentIntents, Invoices, Subscriptions, Products, Prices, Events). A secret key works too but grants far more than this pack needs.

How to get one: docs.stripe.com.

The credential is sent only to api.stripe.com.

Store the credential once as a vault connection for this pack and key, then name its id in a call's connections. Leave the key out and B3OS uses the project's newest connection for the pack and key without a subject (connections).

Hosts it reaches: api.stripe.com.

Actions

ActionEffectMCP toolTitle
get-balancereadstripe__get-balanceGet balance
list-customersreadstripe__list-customersList customers
get-customerreadstripe__get-customerGet customer
search-customersreadstripe__search-customersSearch customers
list-chargesreadstripe__list-chargesList charges
list-payment-intentsreadstripe__list-payment-intentsList payment intents
get-payment-intentreadstripe__get-payment-intentGet payment intent
list-invoicesreadstripe__list-invoicesList invoices
get-invoicereadstripe__get-invoiceGet invoice
list-subscriptionsreadstripe__list-subscriptionsList subscriptions
list-productsreadstripe__list-productsList products
list-pricesreadstripe__list-pricesList prices
list-eventsreadstripe__list-eventsList events
get-eventreadstripe__get-eventGet event

get-balance

Get balance. Funds in the Stripe balance per currency: available now and pending (not yet settled), in the smallest currency unit.

Ref io.b3os/stripe/get-balance@1.0.0 · effect read · connection secret_key · MCP tool stripe__get-balance

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/get-balance@1", "input": {}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Get balance (documented response shape, example values). From the bundle's fixtures/get-balance.json, not a live call.

json
{ "available": [{"amount": 1203400, "currency": "usd"}], "pending": [{"amount": 54900, "currency": "usd"}], "livemode": false}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

list-customers

List customers. Customers, newest first, optionally only those with an exact email. Page with starting_after = the last id while has_more is true.

Ref io.b3os/stripe/list-customers@1.0.0 · effect read · connection secret_key · MCP tool stripe__list-customers

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/list-customers@1", "input": {"email": "buyer@example.com", "limit": 1}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: List customers (documented response shape, example values). From the bundle's fixtures/list-customers.json, not a live call.

json
{ "data": [ { "id": "cus_Qexample0001", "email": "buyer@example.com", "name": "Jane Buyer", "description": null, "created": 1792970000, "currency": "usd", "balance": 0, "delinquent": false, "livemode": false, "metadata": {"crm_id": "8812"} } ], "has_more": false}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

get-customer

Get customer. One customer by id: email, name, description, currency, credit balance, delinquent flag and metadata.

Ref io.b3os/stripe/get-customer@1.0.0 · effect read · connection secret_key · MCP tool stripe__get-customer

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/get-customer@1", "input": {"id": "cus_Qexample0001"}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Get customer (documented response shape, example values). From the bundle's fixtures/get-customer.json, not a live call.

json
{ "id": "cus_Qexample0001", "email": "buyer@example.com", "name": "Jane Buyer", "description": null, "created": 1792970000, "currency": "usd", "balance": 0, "delinquent": false, "livemode": false, "metadata": {"crm_id": "8812"}}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

search-customers

Search customers. Search customers with Stripe's search query language, for example email:'jane@example.com', name~'jane', metadata['crm_id']:'8812' or created>1700000000, combined with AND/OR. Newly changed customers can take up to a minute to appear. Page with next_page.

Ref io.b3os/stripe/search-customers@1.0.0 · effect read · connection secret_key · MCP tool stripe__search-customers

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/search-customers@1", "input": {"query": "metadata['\''crm_id'\'']:'\''8812'\''", "limit": 1}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Search customers (documented response shape, example values). From the bundle's fixtures/search-customers.json, not a live call.

json
{ "data": [ { "id": "cus_Qexample0001", "email": "buyer@example.com", "name": "Jane Buyer", "description": null, "created": 1792970000, "currency": "usd", "balance": 0, "delinquent": false, "livemode": false, "metadata": {"crm_id": "8812"} } ], "has_more": false, "next_page": null}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

list-charges

List charges. Charges, newest first, optionally for one customer: amount, refunded amount, status, paid and refunded flags, failure message and receipt URL.

Ref io.b3os/stripe/list-charges@1.0.0 · effect read · connection secret_key · MCP tool stripe__list-charges

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/list-charges@1", "input": {"customer": "cus_Qexample0001", "limit": 1}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: List charges (documented response shape, example values). From the bundle's fixtures/list-charges.json, not a live call.

json
{ "data": [ { "id": "ch_3Qexample0001", "amount": 4900, "amount_refunded": 0, "currency": "usd", "status": "succeeded", "paid": true, "refunded": false, "customer": "cus_Qexample0001", "description": "Pro plan", "payment_intent": "pi_3Qexample0001", "failure_message": null, "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoV", "created": 1792970390 } ], "has_more": true}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

list-payment-intents

List payment intents. Payment intents, newest first, optionally for one customer, with amount, amount received, status and latest charge.

Ref io.b3os/stripe/list-payment-intents@1.0.0 · effect read · connection secret_key · MCP tool stripe__list-payment-intents

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/list-payment-intents@1", "input": {"customer": "cus_Qexample0001", "limit": 1}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: List payment intents (documented response shape, example values). From the bundle's fixtures/list-payment-intents.json, not a live call.

json
{ "data": [ { "id": "pi_3Qexample0001", "amount": 4900, "amount_received": 4900, "currency": "usd", "status": "succeeded", "customer": "cus_Qexample0001", "description": "Pro plan", "latest_charge": "ch_3Qexample0001", "created": 1792970380, "metadata": {} } ], "has_more": false}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

get-payment-intent

Get payment intent. One payment intent by id: amount, amount received, currency, status, customer, latest charge and metadata.

Ref io.b3os/stripe/get-payment-intent@1.0.0 · effect read · connection secret_key · MCP tool stripe__get-payment-intent

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/get-payment-intent@1", "input": {"id": "pi_3Qexample0001"}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Get payment intent (documented response shape, example values). From the bundle's fixtures/get-payment-intent.json, not a live call.

json
{ "id": "pi_3Qexample0001", "amount": 4900, "amount_received": 4900, "currency": "usd", "status": "succeeded", "customer": "cus_Qexample0001", "description": "Pro plan", "latest_charge": "ch_3Qexample0001", "created": 1792970380, "metadata": {}}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

list-invoices

List invoices. Invoices, newest first, filtered by customer, subscription or status (draft, open, paid, uncollectible, void), with totals, amounts due and paid, due date, hosted page and PDF links and line items.

Ref io.b3os/stripe/list-invoices@1.0.0 · effect read · connection secret_key · MCP tool stripe__list-invoices

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/list-invoices@1", "input": {"customer": "cus_Qexample0001", "status": "paid", "limit": 1}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: List invoices (documented response shape, example values). From the bundle's fixtures/list-invoices.json, not a live call.

json
{ "data": [ { "id": "in_1Qexample0001", "number": "B3D4F-0007", "status": "paid", "customer": "cus_Qexample0001", "customer_email": "buyer@example.com", "currency": "usd", "total": 4900, "amount_due": 4900, "amount_paid": 4900, "amount_remaining": 0, "due_date": null, "created": 1792970300, "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1Qexample/test_YWNjdF8x", "invoice_pdf": "https://pay.stripe.com/invoice/acct_1Qexample/test_YWNjdF8x/pdf", "lines": [ { "description": "1 x Pro (at $49.00 / month)", "amount": 4900, "quantity": 1 } ] } ], "has_more": false}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

get-invoice

Get invoice. One invoice by id with status, number, totals, amounts due, paid and remaining, due date, links and line items.

Ref io.b3os/stripe/get-invoice@1.0.0 · effect read · connection secret_key · MCP tool stripe__get-invoice

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/get-invoice@1", "input": {"id": "in_1Qexample0001"}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Get invoice (documented response shape, example values). From the bundle's fixtures/get-invoice.json, not a live call.

json
{ "id": "in_1Qexample0001", "number": "B3D4F-0007", "status": "paid", "customer": "cus_Qexample0001", "customer_email": "buyer@example.com", "currency": "usd", "total": 4900, "amount_due": 4900, "amount_paid": 4900, "amount_remaining": 0, "due_date": null, "created": 1792970300, "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1Qexample/test_YWNjdF8x", "invoice_pdf": "https://pay.stripe.com/invoice/acct_1Qexample/test_YWNjdF8x/pdf", "lines": [ { "description": "1 x Pro (at $49.00 / month)", "amount": 4900, "quantity": 1 } ]}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

list-subscriptions

List subscriptions. Subscriptions filtered by customer, price or status (default: everything not canceled), with status, renewal time, cancel-at-period-end flag and items (price, product, quantity, unit amount, interval).

Ref io.b3os/stripe/list-subscriptions@1.0.0 · effect read · connection secret_key · MCP tool stripe__list-subscriptions

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/list-subscriptions@1", "input": {"customer": "cus_Qexample0001", "limit": 1}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: List subscriptions (documented response shape, example values). From the bundle's fixtures/list-subscriptions.json, not a live call.

json
{ "data": [ { "id": "sub_1Qexample0001", "status": "active", "customer": "cus_Qexample0001", "cancel_at_period_end": false, "current_period_end": 1795648800, "created": 1790380000, "items": [ { "price": "price_1Qexample0001", "product": "prod_Qexample0001", "quantity": 1, "unit_amount": 4900, "interval": "month" } ] } ], "has_more": false}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

list-products

List products. Products, newest first, optionally only active ones: name, description, active flag, default price and metadata.

Ref io.b3os/stripe/list-products@1.0.0 · effect read · connection secret_key · MCP tool stripe__list-products

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/list-products@1", "input": {"active": true, "limit": 1}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: List products (documented response shape, example values). From the bundle's fixtures/list-products.json, not a live call.

json
{ "data": [ { "id": "prod_Qexample0001", "name": "Pro", "description": "Pro plan", "active": true, "default_price": "price_1Qexample0001", "created": 1790000000, "metadata": {} } ], "has_more": false}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

list-prices

List prices. Prices, newest first, optionally for one product or only active ones: unit amount, currency, one-time or recurring interval, nickname and lookup key.

Ref io.b3os/stripe/list-prices@1.0.0 · effect read · connection secret_key · MCP tool stripe__list-prices

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/list-prices@1", "input": {"product": "prod_Qexample0001", "limit": 1}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: List prices (documented response shape, example values). From the bundle's fixtures/list-prices.json, not a live call.

json
{ "data": [ { "id": "price_1Qexample0001", "product": "prod_Qexample0001", "active": true, "currency": "usd", "unit_amount": 4900, "type": "recurring", "interval": "month", "nickname": null, "lookup_key": "pro_monthly" } ], "has_more": false}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

list-events

List events. Account events of the last 30 days, newest first, optionally only some types (invoice.paid, customer.subscription.deleted, charge.refunded, ...). ending_before returns only events newer than that event id.

Ref io.b3os/stripe/list-events@1.0.0 · effect read · connection secret_key · MCP tool stripe__list-events

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/list-events@1", "input": {"types": ["invoice.paid"], "limit": 1}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: List events (documented response shape, example values). From the bundle's fixtures/list-events.json, not a live call.

json
{ "data": [ { "id": "evt_1QexampleInvoicePaid", "type": "invoice.paid", "created": 1792970390, "livemode": false, "api_version": "2025-09-30.clover", "data": { "object": { "id": "in_1Qexample0001", "object": "invoice", "amount_paid": 4900, "currency": "usd", "customer": "cus_Qexample0001", "status": "paid" } } } ], "has_more": false}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

get-event

Get event. One event by id, including the object it describes in data.object. Stripe keeps events for 30 days.

Ref io.b3os/stripe/get-event@1.0.0 · effect read · connection secret_key · MCP tool stripe__get-event

bash
curl -s https://beta-api.b3os.org/v1/actions/call \ -H "Authorization: Bearer $B3OS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "ref": "io.b3os/stripe/get-event@1", "input": {"id": "evt_1QexampleInvoicePaid"}, "connections": {"secret_key": "conn_01m5t6cbgdjs1ketgcqwa2sne8"} }'

Output, labeled fixture: Get event (documented response shape, example values). From the bundle's fixtures/get-event.json, not a live call.

json
{ "id": "evt_1QexampleInvoicePaid", "type": "invoice.paid", "created": 1792970390, "livemode": false, "api_version": "2025-09-30.clover", "data": { "object": { "id": "in_1Qexample0001", "object": "invoice", "amount_paid": 4900, "currency": "usd", "customer": "cus_Qexample0001", "status": "paid" } }}

When the service answers with an error, the call fails with upstream_error and pack_error.code is one of:

pack_error.codeService statusRetryableMessage
not_found404nobuilt from the service's response
connection_unauthorized401noStripe rejected the API key.
forbidden403nobuilt from the service's response
rate_limited429yesStripe rate limit reached; retry with backoff.
invalid_request400nobuilt from the service's response

Triggers

event (trigger)

Stripe event. Fires once per new Stripe event whose type is in the subscription's types (wildcards like invoice.* work, * for all), checked every 30 seconds by default from the events list. No webhook endpoint is created in your account. The first check records the latest event and emits nothing.

Ref io.b3os/stripe/event@1.0.0 · poll of list-events, every 30 s by default (at least 10 s) · connection secret_key

with keyRequiredDescription
typesyesEvent types, for example invoice.paid, or * for all.

In a routine:

yaml
triggers: - type: action id: event uses: io.b3os/stripe/event@1 with: types: - invoice.paid connections: secret_key: conn_01m5t6cbgdjs1ketgcqwa2sne8

Event, labeled fixture: the first item of list-events's fixture fixtures/list-events.json (List events (documented response shape, example values)) through the trigger's event mapping. A routine reads it as trigger.data; its fields are id, type, created, livemode, api_version, data.

json
{ "id": "evt_1QexampleInvoicePaid", "type": "invoice.paid", "created": 1792970390, "livemode": false, "api_version": "2025-09-30.clover", "data": { "object": { "id": "in_1Qexample0001", "object": "invoice", "amount_paid": 4900, "currency": "usd", "customer": "cus_Qexample0001", "status": "paid" } }}

webhook-event (trigger)

Stripe event (webhook). Fires as Stripe delivers events to a webhook endpoint you add in the Stripe Dashboard (Developers, Webhooks) with this subscription's URL; paste that endpoint's signing secret (whsec_...) when you create the subscription. Every delivery's Stripe-Signature is verified and must be at most 5 minutes old. Only the types you list (or * for all) and types under the prefixes you list (customer.subscription. for every subscription event) are emitted. Faster than the polled event trigger; the pack itself still never writes to Stripe.

Ref io.b3os/stripe/webhook-event@1.0.0 · webhook, signature scheme stripe with a signing secret you bind as webhook_secret · connection webhook_secret

with keyRequiredDescription
typesnoEvent types to emit, for example invoice.paid, or * for all. Default [].
type_prefixesnoAlso emit every type starting with one of these, for example customer.subscription. or invoice. Default [].

In a routine:

yaml
triggers: - type: action id: webhook_event uses: io.b3os/stripe/webhook-event@1 with: types: - invoice.paid type_prefixes: - customer.subscription. connections: webhook_secret: conn_01m5t6cbgdjs1ketgcqwa2sne8

Event, labeled fixture: the recorded delivery in fixtures/webhook-event-invoice-paid.json (Stripe event (webhook) (delivery signed with a throwaway test secret)). A routine reads it as trigger.data; its fields are id, type, created, livemode, api_version, data.

json
{ "id": "evt_1QexampleInvoicePaid", "type": "invoice.paid", "created": 1792970390, "livemode": false, "api_version": "2025-09-30.clover", "data": { "object": { "id": "in_1Qexample0001", "object": "invoice", "amount_paid": 4900, "currency": "usd", "customer": "cus_Qexample0001", "status": "paid" } }}
Ask a question... ⌘I