Skip to main content

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.

Two separate secrets

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.

  1. Open Connections in your workspace

    In TaskJuice, open the workspace for this client and go to Connections.

  2. Start a new Stripe connection

    Choose Stripe and start a new connection.
  3. Create a restricted secret key in Stripe

    In the Stripe dashboard at https://dashboard.stripe.com/apikeys, create a restricted secret key. Use sk_live_... for production or sk_test_... for testing.

  4. 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

FieldTypeRequiredDefaultDescription
Secret Key (apiKey)textYes-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 keyDisplay nameFires on
stripe/payment-eventPayment EventStripe payment_intent.* events: succeeded, payment_failed, canceled, and others. Filter downstream by type to narrow.
stripe/charge-eventCharge EventStripe charge.* events: succeeded, failed, refunded, and others.
stripe/customer-eventCustomer EventStripe 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.

FieldTypeDescription
idstringStripe event ID (evt_...). Stable across retries, so use it to deduplicate.
typestringThe specific event type, for example payment_intent.succeeded. Branch or filter on this to narrow a broad trigger.
api_versionstringThe Stripe API version that produced the event.
createdintegerEpoch seconds when Stripe created the event.
livemodebooleantrue for live-mode events, false for test mode.
dataobjectThe event data object, which is the PaymentIntent, Charge, or Customer shape. Additional properties are allowed.
requestobject or nullThe 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.

FieldTypeRequiredDefaultDescription
amountintegerYes-Amount in the smallest currency unit, for example cents for USD. Minimum 1.
currencystringYes-Three-letter ISO currency code, for example usd or eur.
customerstringNo-Optional Stripe customer ID to attach this payment to.
descriptionstringNo-Description for the payment.
receipt_emailstringNo-Email address to send a receipt to.
automatic_payment_methods_enabledbooleanNotrueLets 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}.

FieldTypeRequiredDefaultDescription
idstringYes-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.

FieldTypeRequiredDefaultDescription
emailstringNo-Customer email address.
namestringNo-Customer name.
phonestringNo-Customer phone number.
descriptionstringNo-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 statusError codeRetryableWhat it usually means
400VALIDATION_ERRORNoA required field is missing or malformed, for example a non-positive amount.
401AUTH_EXPIREDNoThe secret key is wrong or revoked. Update the connection.
402PAYMENT_REQUIREDNoStripe declined the payment, for example a card decline on Create Payment Intent.
404NOT_FOUNDNoThe referenced object does not exist, for example an unknown charge ID.
409CONFLICTNoThe request conflicts with the current state of the object.
429RATE_LIMITEDYesStripe rate limit hit. TaskJuice retries with backoff.
500PROVIDER_ERRORYesStripe 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-event trigger 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 the type output field.
  • A 402 PAYMENT_REQUIRED on 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.
Was this helpful?