Skip to main content

Payments: direct connection

InvoiceQuickly + Stripe: hosted payment links for your invoices

On the Pro plan ($9/month), you connect the Stripe account you already own by pasting three values from Stripe, then create a Stripe Checkout link for the remaining balance of any sent invoice. Your client pays on a page hosted by Stripe, the money goes to your Stripe balance, and InvoiceQuickly records the payment when Stripe confirms the Checkout Session as paid. This is not Stripe Connect: InvoiceQuickly never holds funds, never sees card numbers, and adds no per-payment fee. Stripe's own fees apply, for example 2.9% + 30¢ on a US card as of October 2026. Three limits to know before you rely on it: each link expires 24 hours after you create it, bank-debit payments are recorded only after Stripe confirms settlement, and zero-decimal currencies such as JPY should not be used with links.

How it works

Setting up Stripe payments, step by step

  1. Step 1: Open Integrations and configure the Stripe card

    In the dashboard, go to Integrations and choose Configure on the Stripe card. Save the Publishable key (pk_...) and Secret or restricted key (sk_... or rk_...) first. Leave the webhook signing secret empty until you have created the Stripe endpoint. The connection stays inactive until all credentials, including the real signing secret, are saved. Only owners and admins can save provider credentials, and the card is locked on the Free plan.

  2. Step 2: Copy the webhook URL InvoiceQuickly gives you

    After the first save, the inactive card shows the last four characters of your keys and a Webhook URL with a Copy button. Use that URL to create the Stripe endpoint; do not enter a temporary signing secret.

  3. Step 3: Create the webhook endpoint in Stripe

    In Stripe Workbench, open Webhooks, create an event destination for Your account, choose the Snapshot payload, select checkout.session.completed and checkout.session.async_payment_succeeded, choose Webhook endpoint, and paste the URL. Stripe then shows a signing secret starting with whsec_. Back in InvoiceQuickly, choose Finish webhook setup and save the real secret; leave existing key fields blank to keep them.

  4. Step 4: Send the invoice, then choose Create Stripe link

    The Create Stripe link action appears in an invoice's action menu once the invoice has left draft, is not cancelled, and still has a balance. The link charges the balance at that moment: total, minus recorded payments, minus credit notes. Your client sees a Pay button with that amount in their client portal, and the link is included the next time you email the invoice.

  5. Step 5: Stripe confirms, InvoiceQuickly records

    The client pays on a Stripe Checkout page titled with your invoice number, for example Invoice INV-0042, then lands on a confirmation page. When Stripe sends checkout.session.completed with a paid status, or checkout.session.async_payment_succeeded after delayed settlement, InvoiceQuickly records the payment against the invoice with the Stripe payment reference. If the payment clears the balance, the invoice status changes to paid.

Why connect it

What connecting Stripe gives you

What you get

  • Your client pays on Stripe-hosted Checkout, so card details never pass through InvoiceQuickly
  • Money settles in your own Stripe balance and pays out on your Stripe schedule
  • Each payment is matched to its invoice from a signed Stripe event, not from the browser redirect
  • Duplicate deliveries of the same Stripe event are ignored, so retries do not double-count a payment
  • Credentials are encrypted with AES-256-GCM before storage and only the last four characters are shown
  • Clients see the payment methods you have enabled in your Stripe Dashboard; InvoiceQuickly does not restrict them

Best for

  • Freelancers and consultants who already have a Stripe account and want clients to pay a sent invoice by card the same day
  • Small agencies that want card payments recorded against each invoice without retyping them
  • Businesses invoicing in USD, EUR, GBP, CAD or AUD whose Stripe account accepts that currency
  • Not a fit if you need to charge a saved card automatically each month, take a deposit before work starts or need an instant cleared balance for bank debits that settle later

Setup

Setting it up

You need a Stripe account you control and an InvoiceQuickly paid plan with an owner or admin role. Save matching API keys first; the card remains inactive and shows the connection's Webhook URL. In Stripe Workbench, create a Snapshot webhook endpoint for Your account with checkout.session.completed and checkout.session.async_payment_succeeded. Copy the real whsec_ signing secret, choose Finish webhook setup in InvoiceQuickly and save it. Leave unchanged API-key fields blank. Use test keys with a test-mode endpoint and live keys with a live endpoint. A restricted key needs Checkout Session permissions and Refund permissions if you refund from InvoiceQuickly. Test a payment and confirm it appears on the invoice. Disconnecting retains invoice/payment records; reconnecting creates a new webhook URL that must be updated in Stripe.

Good practice

Best practices

Keep keys and webhook secret in the same mode

Stripe gives test and live endpoints different signing secrets, even for the same URL. Test keys need the test endpoint's secret, and live keys need the live endpoint's secret. A mismatch means every event fails signature checks and nothing is recorded.

Create the link close to when the client will pay

Because a Stripe Checkout Session lasts 24 hours, create the link when you send or resend the invoice, not days ahead. If a client says the link stopped working, create a fresh one; the old one cannot be extended.

Recreate the link after any change to the balance

The link charges a fixed amount. If you record a manual payment or issue a credit note after creating it, create a new link. Otherwise the client could pay the old, higher amount, and InvoiceQuickly will refuse to record more than the remaining balance.

Check Stripe for delayed payment methods

InvoiceQuickly records paid Checkout Sessions and delayed payments confirmed by checkout.session.async_payment_succeeded. Pending bank debits are not recorded as paid. Enable both events on your signed webhook endpoint and reconcile the result with Stripe.

Reconcile fees in Stripe, not on the invoice

InvoiceQuickly records the gross amount your client paid, such as $850.00, not the $825.05 that reaches your Stripe balance. Use Stripe's balance and payout reports, or your bookkeeping, for fees.

Troubleshooting

Common issues

The client paid, but the invoice is still unpaid

In Stripe Workbench, open the webhook endpoint's Event deliveries tab. If there is no delivery, the endpoint is missing, points at an old URL, or is not subscribed to checkout.session.completed and checkout.session.async_payment_succeeded. If the delivery shows a 400 error, the signing secret in InvoiceQuickly does not match this endpoint or mode. If deliveries succeed but nothing is recorded, check that the endpoint uses the Snapshot payload and both required Checkout events. Fix it, then choose Resend on the event; Stripe allows that for up to 15 days. For bank debits, wait for the signed delayed-success event; never mark a pending debit paid.

Stripe shows a 404 for webhook deliveries

The URL no longer matches an active Stripe connection, usually because Stripe was disconnected and connected again, which creates a new webhook URL. Copy the current URL from the Stripe card and update the endpoint in Stripe.

Deliveries fail with a 400 even though the secret is right

InvoiceQuickly also rejects the event if the invoice cannot take the payment, for example because it was already marked paid or a manual payment was recorded after the link was created, leaving less balance than the client paid. Check the invoice's payments; refund or adjust in Stripe if the client overpaid.

Creating a link says Stripe rejected your API key

The secret or restricted key is wrong, revoked or from another account. Choose Update on the Stripe card and enter all three values again. If you use a restricted key, open its request logs in the Stripe Dashboard and add any permission Stripe refused.

The client says the link has expired

Stripe closes Checkout Sessions 24 hours after creation. Open the invoice, choose Create Stripe link again, and send the new link or point the client to the Pay button in their portal.

Questions

Stripe and InvoiceQuickly: questions

Is this Stripe Connect?

No. You paste API keys from your own Stripe account. InvoiceQuickly creates Checkout Sessions on that account, the money goes to your Stripe balance, and InvoiceQuickly never holds funds or controls payouts.

What does Stripe charge per invoice payment?

Stripe's fees, not InvoiceQuickly's. Worked example on an $850.00 invoice using Stripe's US pricing page (accessed October 27, 2026): a US card costs 2.9% + 30¢ = $24.95, so you receive $825.05. An international card adds 1.5% ($37.70 fee); one that also needs currency conversion adds another 1% ($46.20 fee). ACH Direct Debit, if you enable it, is 0.8% capped at $5.00, and those payments are recorded after Stripe confirms settlement. Non-US Stripe accounts have different rates.

What is the difference between this and Stripe Invoicing?

InvoiceQuickly creates a one-time Stripe Checkout payment for the invoice balance, which Stripe includes at no extra charge on standard pricing. It does not create a Stripe invoice, so Stripe Invoicing's 0.4% per paid invoice (Starter) does not apply. The invoice, PDF, reminders and client portal live in InvoiceQuickly.

How long does a Stripe payment link last?

24 hours. InvoiceQuickly does not set an expiry, so Stripe's default applies: a Checkout Session expires 24 hours after it is created. If your client opens the link later, create a new one from the invoice.

Can my client pay part of the invoice through Stripe?

Not by choosing an amount. The link charges a fixed amount: the balance when you created it. If the client pays part another way, record that payment first, then create a new link for the rest.

Which currencies work with Stripe links?

The link charges in the invoice's currency, and the editor offers USD, EUR, GBP, CAD, AUD, INR and PKR. Your Stripe account must support it. Avoid zero-decimal currencies such as JPY or KRW: InvoiceQuickly multiplies amounts by 100, but Stripe expects those currencies without decimals, so the charge would be wrong.

Can I refund a Stripe payment from InvoiceQuickly?

Yes, if you are an owner or admin. In Payments, choose Refund, enter the amount and reason, and confirm. For a Stripe payment this sends the refund to Stripe and reopens the invoice balance; it is not merely a bookkeeping entry. Check any refund already issued in Stripe before confirming another.

Is Stripe available on the Free plan?

No. Stripe and PayPal payment links are part of Pro. Free can record bank transfers, cards, cash, checks and partial payments by hand.

Create your first invoice

The Free plan covers 5 invoices in total with PDF download. Pro is $9/month for unlimited invoices, email delivery and Stripe or PayPal payment links.

Start free

Last verified: October 2026