Stripe payments
Every plan except Free.
Connect Stripe to collect payments from clients inside your onboarding forms, such as a deposit, a retainer, a setup fee, or a monthly fee. Clients pay in an embedded Stripe form without leaving the onboarding. Some payment methods may open a confirmation page from Stripe.
Setup
Owners and Admins can connect Stripe. Connecting also needs a plan that includes payments.
Go to Settings > Integrations.
Under Payments, paste your Stripe API keys into Publishable key and Secret key. Find them in your Stripe Dashboard.
Optionally, paste a Stripe webhook signing secret into Webhook signing secret (optional). See Renewal tracking.
Click Connect Stripe.
Your secret key is encrypted at rest and never shown to clients. Use live keys to take real payments and test keys for testing.
Once connected, Portico shows a status for One-time payments, Recurring payments, Renewal tracking, and Account identity read. Click Update keys to replace your keys. To disconnect Stripe, click Remove keys, then Remove Stripe to confirm.
If you use a restricted API key, give it read access to your Stripe account details. Recurring payments also need write access to Customers, Products, and Subscriptions.
Renewal tracking
Without a webhook signing secret, Portico records the first payment only. It learns nothing about renewals, failed payments, or cancellations.
To track them, create a webhook endpoint in Stripe that points at https://app.portico.run/api/webhooks/client-payment. Select these events:
payment_intent.succeededpayment_intent.payment_failedcustomer.subscription.updatedcustomer.subscription.deleted
Then paste the endpoint's signing secret into Portico. The Payments form lists these steps under Set up the Stripe webhook, with Copy next to the Endpoint URL. If Stripe is already connected, click Add signing secret under Renewal tracking. Paste the secret, then click Save signing secret.
Adding a payment field
Add a Payment field to any template in the Template builder. You can add it before Stripe is connected, but the builder then warns that clients cannot pay until you connect Stripe.
Configure the payment field:
Payment type — One-time, Monthly, or Yearly. Monthly and yearly payments create a Stripe subscription on your account. Its Stripe product is named "Payments for" plus your firm name, and Stripe can show that name on your client's invoices.
Amount — a fixed amount in US dollars, with at most 2 decimal places. Set $0.50 or more, since Stripe declines anything lower.
Description — what the payment is for. Portico sends it to Stripe and falls back to the field label when it is empty.
Payments accept US dollars only, and clients cannot change the amount.
Before you send
Portico checks a required payment field before it sends. A field that a condition can make required counts as required. An invalid amount is under $0.50, over $999,999.99, or not a whole number of cents. Stripe must be connected. After you click Send, Portico also refuses the send when your plan cannot collect payments: Free, or an ended trial. Upgrade your plan or connect Stripe, then send again. To send without the payment, make the field optional in the template, then create a new onboarding from it. Any other payment field never blocks sending, including an optional field and a field in an optional step.
What clients see
When a client reaches the payment field, they see a payment form from Stripe with a Pay now button. After a successful payment, the field shows the amount paid. Recurring payments show the amount per month or per year.
If Stripe finds a problem with the details entered, the client sees Stripe's message and can retry. When the result is unclear, the field says "We could not confirm whether your payment went through. Check its status before you pay again."
If your plan stops collecting payments after you send, the field tells the client to contact your firm. For a required payment, the client clicks Continue without paying online. The field then reads "Arranged with" and your firm name, and Portico emails you to collect the payment directly.
Tracking payments
The onboarding's Responses tab shows Paid for a completed one-time payment. A recurring payment shows Subscription active with its amount and interval. A successful one-time payment is also recorded in the onboarding's History tab, with a general label. A recurring payment is recorded once, when the subscription starts. Renewals update the subscription status only and add no History entry.
Webhook events
When a payment succeeds, Portico fires a payment.succeeded webhook event. Its data includes payment_id, field_id, payment_intent_id, and amount_cents, plus the onboarding and client details.
For a recurring payment, the event carries subscription_id in place of payment_id, plus recurring and interval. In that case payment_intent_id holds the Stripe subscription ID. The event fires once, when the subscription becomes active. Renewals fire no further events.
Fees
Portico does not charge any transaction fees on top of Stripe. You connect your own Stripe account and receive payments directly. Standard Stripe processing fees apply.
Frequently asked questions
Does Portico charge transaction fees on top of Stripe?
No. You connect your own Stripe account and keep 100% of payments minus standard Stripe processing fees.
How do I take a deposit before work starts?
Add a Payment field to the template, set Payment type to One-time, and enter the deposit as the Amount. The client pays it inside the onboarding form.
Can clients enter a custom payment amount?
No. You set a fixed amount in US dollars on each payment field, and the client pays that amount.
Which plan includes Stripe payments?
Stripe payment collection is available on every plan except Free. That includes the Pro trial and every lifetime and AppSumo plan. Clients of a Free plan team cannot pay online.