- Documentation
- Integrations
- Apps
- Stripe integration
Stripe integration
Create payments and customers in a client's Stripe account and start workflows when payment events fire.
What it does
The Stripe integration lets your agency create charges and customers in a client's Stripe account and start workflows the moment a payment, charge, or customer event fires. You connect a client's account once with a Stripe secret key, then use that connection in any workflow to create a PaymentIntent, retrieve a charge, or create a customer record.
Authentication is a pasted Stripe secret key, not a sign-in flow. Webhook triggers are verified separately with a per-trigger signing secret, which is a different value from the secret key. See Connect a Stripe account for both.
The connection asks for your Stripe secret key (used to call the Stripe API). Each webhook trigger asks for Stripe's webhook signing secret (used to verify incoming events). These are different values from different places in the Stripe dashboard. Mixing them up is the most common setup mistake.
Connect a Stripe account
The connection holds the secret key TaskJuice uses to call Stripe on behalf of a client. You add it once per workspace and reuse it across workflows.
Open Connections in your workspace
In TaskJuice, open the workspace for this client and go to Connections.
Start a new Stripe connection
Choose Stripe and start a new connection.Create a restricted secret key in Stripe
In the Stripe dashboard at
https://dashboard.stripe.com/apikeys, create a restricted secret key. Usesk_live_...for production orsk_test_...for testing.Paste the key into the Secret Key field
Paste the key into the Secret Key field and save. TaskJuice stores it encrypted and never returns it to the browser, so you cannot read it back later. To change it, paste a new key.
The webhook signing secret is not entered here. You configure it on each webhook trigger you add to a workflow. Get it from the Stripe dashboard under Developers, Webhooks, Signing secret, and paste it into the trigger. For the connection flow shared across every app, see Connect an account.
Connection field
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
Secret Key (apiKey) | text | Yes | - | Your Stripe secret key from https://dashboard.stripe.com/apikeys. Stored encrypted; use a restricted key in production. |
Triggers
Stripe sends each event as a real webhook, so triggers fire instantly rather than on a poll interval. Each delivery carries exactly one event, which starts one run. There is no batching, so you do not add a Loop node to fan out Stripe events.
Every trigger requires the per-trigger webhook signing secret described above. There is one trigger per Stripe object family. To react to a specific subtype such as payment_intent.succeeded, add a downstream Branch or filter node on the type output field rather than looking for a subtype-specific trigger.
| Trigger key | Display name | Fires on |
|---|---|---|
stripe/payment-event | Payment Event | Stripe payment_intent.* events: succeeded, payment_failed, canceled, and others. Filter downstream by type to narrow. |
stripe/charge-event | Charge Event | Stripe charge.* events: succeeded, failed, refunded, and others. |
stripe/customer-event | Customer Event | Stripe customer.* events: created, updated, deleted, subscription changes, and others. |
Trigger output
All three triggers emit the same top-level fields. Map any of these into downstream nodes.
| Field | Type | Description |
|---|---|---|
id | string | Stripe event ID (evt_...). Stable across retries, so use it to deduplicate. |
type | string | The specific event type, for example payment_intent.succeeded. Branch or filter on this to narrow a broad trigger. |
api_version | string | The Stripe API version that produced the event. |
created | integer | Epoch seconds when Stripe created the event. |
livemode | boolean | true for live-mode events, false for test mode. |
data | object | The event data object, which is the PaymentIntent, Charge, or Customer shape. Additional properties are allowed. |
request | object or null | The API request that caused the event, when applicable. |
Always present: id, type, created, and data.
Actions
Actions call the Stripe REST API at https://api.stripe.com/v1/... using the secret key on the connection. Each action requires a connected Stripe account.
Create Payment Intent
stripe/create-payment-intent creates a Stripe PaymentIntent to initiate a payment flow. It sends POST https://api.stripe.com/v1/payment_intents.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
amount | integer | Yes | - | Amount in the smallest currency unit, for example cents for USD. Minimum 1. |
currency | string | Yes | - | Three-letter ISO currency code, for example usd or eur. |
customer | string | No | - | Optional Stripe customer ID to attach this payment to. |
description | string | No | - | Description for the payment. |
receipt_email | string | No | - | Email address to send a receipt to. |
automatic_payment_methods_enabled | boolean | No | true | Lets Stripe choose eligible payment methods. Maps to Stripe automatic_payment_methods[enabled]. |
Output fields: id, object, amount, currency, status, client_secret, customer (string or null), created (integer).
Retrieve Charge
stripe/retrieve-charge fetches a Stripe charge by ID. It sends GET https://api.stripe.com/v1/charges/{id}.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | string | Yes | - | The Stripe charge ID (ch_...). |
Output fields: id, object, amount, currency, status, customer (string or null), paid (boolean), refunded (boolean).
Create Customer
stripe/create-customer creates a Stripe customer record. It sends POST https://api.stripe.com/v1/customers. Every field is optional.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
email | string | No | - | Customer email address. |
name | string | No | - | Customer name. |
phone | string | No | - | Customer phone number. |
description | string | No | - | Description for the customer. |
Output fields: id, object, email (string or null), name (string or null), created (integer).
Errors
When a Stripe call fails, TaskJuice maps the upstream HTTP status to a normalized error code on the step. Retryable errors are retried automatically; non-retryable errors stop the run at that step.
| HTTP status | Error code | Retryable | What it usually means |
|---|---|---|---|
| 400 | VALIDATION_ERROR | No | A required field is missing or malformed, for example a non-positive amount. |
| 401 | AUTH_EXPIRED | No | The secret key is wrong or revoked. Update the connection. |
| 402 | PAYMENT_REQUIRED | No | Stripe declined the payment, for example a card decline on Create Payment Intent. |
| 404 | NOT_FOUND | No | The referenced object does not exist, for example an unknown charge ID. |
| 409 | CONFLICT | No | The request conflicts with the current state of the object. |
| 429 | RATE_LIMITED | Yes | Stripe rate limit hit. TaskJuice retries with backoff. |
| 500 | PROVIDER_ERROR | Yes | Stripe returned a server error. TaskJuice retries. |
Create Payment Intent maps all seven statuses above. Retrieve Charge maps 401, 404, 429, and 500. Create Customer maps 400, 401, 409, 429, and 500.
Known limitations
- The integration ships three actions only: Create Payment Intent, Retrieve Charge, and Create Customer. There is no action to create subscriptions, issue refunds, create invoices, or list and search Stripe objects. Subscription changes are visible only as something the
customer-eventtrigger observes, not something you can create or modify. - There are no dynamic dropdown pickers. Customer ID and charge ID are plain text fields you type in or map from an upstream node's output.
- There is one trigger per Stripe object family rather than per event subtype. To act on a single subtype such as
charge.refunded, branch on thetypeoutput field. - A
402PAYMENT_REQUIREDon Create Payment Intent, for example a declined card, is a permanent failure. The run stops at that step and does not retry. - This integration is plain Stripe API access. It is unrelated to TaskJuice's own Stripe Connect billing, which is covered in Stripe Connect setup.