Paystack Payment Processor¶
Overview¶
The Paystack task takes a payment through the account's Paystack connection. It has two actions:
- Charge Account — charges the saved card (Paystack authorisation) on the client's billing account in BaseCloud.
- Create Payment Link — starts a Paystack checkout for the amount and returns its link, to send to the client.
The amount is given in the currency's main unit (500.00) and converted to the smallest unit for Paystack.

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 Paystack 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 Paystack authorisation in BaseCloud. The default one is charged; without one the task fails.
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 |
|---|---|---|---|---|
| Paystack Connection | app_connection_id |
app-connection | – | |
| Action | paystack_action |
select | charge_account |
Options: Charge Account · Create Payment Link |
| Client ID | o_client_id |
textarea | – | Only shown when paystack_action is charge_account |
email |
textarea | – | Only shown when paystack_action is create_payment_link |
|
| Amount | amount |
textarea | – | |
| Currency | currency |
select | ZAR |
Options: ZAR — South African Rand · USD — US Dollar · NGN — Nigerian Naira · GHS — Ghanaian Cedi · KES — Kenyan Shilling |
| Metadata | metadata_rows |
dyn-rows | – | Only shown when paystack_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. - The saved authorisation is charged at once, to the billing account's email. Metadata rows are sent with the charge;
BaseCloud adds
owner_idandclient_id. - Check the result. Paystack answers "Charge attempted" even when the bank declines the card, so the task
completes either way. Read
data_status— onlysuccessmeans the money was taken — and branch on it with an If before confirming anything to the client.
Create Payment Link¶
- Email is required — it is the payer's email on the Paystack checkout.
- The link is
data_authorization_url; send it with an Email or SMS task.
Output Fields¶
Reference fields as {{task_<ID>_<field>}}. Paystack's own answer is passed through: status and message, and the
transaction under data_….
Charge Account output¶
{
"task_32001_run": true,
"task_32001_run_text": "Transaction Successful",
"task_32001_status": true,
"task_32001_message": "Charge attempted",
"task_32001_data_id": 123456789,
"task_32001_data_domain": "live",
"task_32001_data_status": "success",
"task_32001_data_reference": "PAYSTACK-1707397234567-8901",
"task_32001_data_amount": 50000,
"task_32001_data_currency": "NGN",
"task_32001_data_authorization_authorization_code": "AUTH_xxxxx",
"task_32001_data_authorization_card_type": "visa",
"task_32001_data_authorization_last4": "4081",
"task_32001_data_authorization_bank": "TEST BANK",
"task_32001_data_customer_email": "customer@example.com"
}
Create Payment Link output¶
{
"task_32001_run": true,
"task_32001_run_text": "Authorization URL created",
"task_32001_status": true,
"task_32001_message": "Authorization URL created",
"task_32001_data_authorization_url": "https://checkout.paystack.com/xxxxxxx",
"task_32001_data_access_code": "xxxxxxx",
"task_32001_data_reference": "PAYSTACK-1707397234567-8901"
}
Real-World Examples¶
Send a payment link with an invoice¶
Form Submission
└─ Match to Client look the client up
└─ Paystack generate a payment link
└─ Email send the link
Charge a saved payment method¶
Schedule (monthly)
└─ Paystack charge the stored authorisation
└─ If data_status is "success"
└─ SMS confirm to the customer
Follow up when a payment arrives¶
Webhook In (Paystack charge succeeded)
└─ Match to Client contact_email from the payload
└─ Workflow Note log it against the client
Troubleshooting¶
| Message | Cause and fix |
|---|---|
| No app connection ID provided. / Failed to fetch app connection. | Pick a Paystack connection; reconnect it in Settings › App Connections if it was removed. |
| Paystack secret key not found in connection | Reconnect Paystack with its secret key. |
| 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. |
The task completed but data_status is failed |
The bank declined the charge; Paystack's data_gateway_response says why. |
| Rate limited — rescheduled for retry. | Nothing — the run is retried automatically. |
Related Tasks¶
- Stripe — the same two actions through Stripe
- Email — send a payment link or a confirmation
- If Statement — branch on
data_status - Workflow Note — log the payment against the client
FAQ¶
Can I refund a payment here? No — refund in the Paystack Dashboard.
Can I test without real charges? Yes — connect Paystack with a test secret key (sk_test_…) and use Paystack's
test cards.
Which currencies? ZAR, USD, NGN, GHS and KES, as the Currency setting offers — each only if your Paystack account accepts it.