Stripe Payment Processor¶
Overview¶
The Stripe task takes a payment through the account's Stripe connection. It has two actions:
- Charge Account — charges the card saved on the client's billing account in BaseCloud, at once.
- Create Payment Link — creates a Stripe payment page for the amount, to send to the client.
The amount is given in the currency's main unit (99.99) and converted to cents for Stripe.

Connections live in Settings → App Connections, not on the task. Connect the app once and every task that needs it can use it. The badge on each tile says how it authenticates — OAuth2 sends you to the provider to sign in, API Key expects a key you paste in.
Prerequisites¶
- A Stripe connection in Settings → App Connections, with the account's secret key.
- For Charge Account: the client must have an active billing account with a saved card in BaseCloud. The default one is charged; without one the task fails (see Troubleshooting).
Configuration¶
Builder fields¶
The Field column is the label as it appears in the task builder; Key is the name the value is stored under and referenced by.
| Field | Key | Type | Default | Notes |
|---|---|---|---|---|
| Stripe Connection | app_connection_id |
app-connection | – | |
| Action | action |
select | charge_account |
Options: Charge Account · Create Payment Link |
| Client ID | o_client_id |
textarea | – | Only shown when action is charge_account |
email |
textarea | – | Only shown when action is create_payment_link |
|
| Amount | amount |
textarea | – | Only shown when action is charge_account, create_payment_link |
| Currency | currency |
select | USD |
Options: USD — US Dollar · ZAR — South African Rand · EUR — Euro · GBP — British Pound. Only shown when action is charge_account, create_payment_link |
| Metadata | metadata_rows |
dyn-rows | – | Only shown when action is charge_account |
Charge Account¶
- Client ID is the client's
o_client_id— the client is looked up by it, and an unknown id fails the task. - Amount must be a number; Currency is one of the four offered.
- The card is charged straight away (a Stripe Payment Intent, confirmed). Only a payment Stripe reports as
succeededpasses: anything else —requires_action(the bank wants 3-D Secure),processing, a decline — fails the task with Stripe's status or message, and the tasks after it do not run. - Metadata rows are sent to Stripe with the payment; BaseCloud adds
owner_idandclient_id. Stripe's limits are checked first — at most 50 keys, keys up to 40 characters, values up to 500 — and a breach fails the task, naming the entry, before anything is charged.
Create Payment Link¶
- Email is required. Amount and Currency set the price.
- Each run creates a new Stripe product and price for the amount, then the payment link — three calls to Stripe. A
failure at any step fails the task with Stripe's message (
Failed to create product: …,Failed to create price: …). - Send the link (
data_payment_link_url) to the client with an Email or SMS task.
Output Fields¶
Reference fields as {{task_<ID>_<field>}}; run_text says what happened.
Charge Account output¶
{
"task_40001_run": true,
"task_40001_run_text": "Payment successful",
"task_40001_id": "pi_3AbCdEfGhIjKlMnO",
"task_40001_object": "payment_intent",
"task_40001_amount": 9999,
"task_40001_currency": "usd",
"task_40001_status": "succeeded",
"task_40001_customer": "cus_AbCdEfGhIjKl",
"task_40001_payment_method": "pm_1AbCdEfGhIjKlMnO",
"task_40001_client_secret": "pi_3AbC_secret_dEfGhIjKlMnOpQrS",
"task_40001_charges_data_0_id": "ch_3AbCdEfGhIjKlMnO",
"task_40001_charges_data_0_amount": 9999,
"task_40001_charges_data_0_status": "succeeded",
"task_40001_charges_data_0_payment_method_details_card_brand": "visa",
"task_40001_charges_data_0_payment_method_details_card_last4": "4242"
}
Create Payment Link output¶
{
"task_40001_run": true,
"task_40001_run_text": "Payment link created successfully",
"task_40001_data_payment_link_url": "https://buy.stripe.com/test_xxxxxxxxxxxxx",
"task_40001_data_payment_link_id": "plink_1AbCdEfGhIjKlMnO",
"task_40001_data_product_id": "prod_AbCdEfGhIjKl",
"task_40001_data_price_id": "price_1AbCdEfGhIjKlMnO"
}
Real-World Examples¶
Send a payment link when a quote is accepted¶
CRM Trigger (status changed to "Quote accepted")
└─ Match to Client look the client up
└─ Stripe generate a payment link
└─ Email send the link to the client
Charge a stored card on a schedule¶
Record the payment against the client¶
Webhook In (Stripe payment succeeded)
└─ Match to Client contact_email from the payload
└─ Workflow Note log the payment against the client
Troubleshooting¶
| Message | Cause and fix |
|---|---|
| No app connection ID provided. / Failed to fetch app connection. | Pick a Stripe connection; reconnect it in Settings › App Connections if it was removed. |
| No currency selected. / Amount is not a number. | Set the currency; map a plain number (no currency symbol) to Amount. |
| No client selected. / the client is not found | Map the client's o_client_id. |
| No active billing account found for this client. | The client has no saved card — send a payment link instead. |
| Payment status: requires_action | The bank wants 3-D Secure, which an automatic charge cannot complete. Send a payment link, which handles it. |
| Payment status: processing | Stripe has not confirmed the payment yet; the task does not wait for it. |
| Stripe takes at most 50 metadata keys … | Reduce or shorten the metadata rows as the message says. |
| Rate limited — rescheduled for retry. | Nothing — the run is retried automatically. |
Related Tasks¶
- Paystack - African market payment processor
- Email - Send payment receipts and confirmations
- PDF - Generate invoices and receipts
- Math Formula - Calculate prorated amounts
- Edit Client - Update payment status
- Workflow Note - Log transactions
FAQ¶
Can I refund a payment here? No — refund in the Stripe Dashboard.
Can I test without real charges? Yes — connect Stripe with a test secret key (sk_test_…) and use Stripe's test
cards.
Which currencies? USD, ZAR, EUR and GBP, as the Currency setting offers.