Payment links in reminder emails
How PaidSoon includes a direct "Pay invoice" link in your reminder emails, and how to make sure it's populated.
When PaidSoon knows the URL where your client can pay their invoice, it adds a "Pay invoice →" link directly in the reminder email body. This lets your client settle immediately without needing to look up the invoice separately.
Before you start
- Confirm your invoice source is connected in Settings → Connections.
- If you use CSV/XLSX imports, make sure you can provide a
payment_urlvalue per row.
Steps
- Confirm the invoice source type (Stripe, Xero/MYOB, or CSV/XLSX import).
- For Stripe, no setup is required: hosted invoice URLs are imported automatically.
- For CSV/XLSX, include a valid
payment_urlper invoice row before import. - If you use custom templates, include
{{paymentLink}}in HTML and{{paymentLinkText}}in plain text where you want the link rendered.
How the link gets included
PaidSoon sources the payment URL automatically — you don't need to configure anything for Stripe-connected accounts.
| Invoice source | How the link is sourced |
|---|---|
| Stripe (connected via Settings → Connections) | PaidSoon uses Stripe's hosted invoice URL (hosted_invoice_url), which Stripe generates for every invoice. The link is captured when the invoice is first imported. |
| Xero / MYOB | Payment URL not currently included. |
| CSV / XLSX import | Included if you provide a payment_url column in your import file (see below). |
Stripe-connected accounts
No action required. Every Stripe invoice imports with its hosted invoice URL. As long as your client's invoice exists in Stripe, PaidSoon will include the link in each reminder automatically.
Invoice imported before this feature was released?
Invoices imported before payment links were supported were stored without a URL. Re-syncing a connection (Settings → Connections → Sync now) does not backfill existing rows. If the link is missing on an older invoice, it will be included for any invoices imported fresh after connecting.
CSV / XLSX imports
To include a payment link for CSV-imported invoices, add a payment_url column to your file.
- Download the latest import template from Dashboard → Import — it includes a
payment_urlcolumn. - Fill in the direct payment URL for each invoice (e.g. your accounting software's client payment portal link, or a custom payment page).
- Import the file. PaidSoon validates the value is a well-formed URL and rejects the row if not.
- The link is stored on the invoice and included in every reminder sent for that invoice.
If you re-upload the same invoice later with a different payment_url, the stored URL is updated.
What the link looks like in the email
The link renders as a plain inline hyperlink: Pay invoice →. It appears in the email body wherever your template places the appropriate token. The default templates already include this token — it is simply omitted when no URL is available.
If you've set up custom templates in Settings → Templates and want to control where the link appears, use the correct token for each part of your template:
- HTML body — use
{{paymentLink}}, which renders as a clickablePay invoice →anchor tag. - Plain-text body — use
{{paymentLinkText}}, which renders as the raw URL so recipients see a clean link rather than HTML markup.
What you'll see
- Stripe-sourced reminders include the Pay invoice → link when the invoice has a hosted URL.
- CSV/XLSX-sourced reminders include the link when
payment_urlis valid in the imported row. - If no payment URL exists, PaidSoon omits the token output from the email body.
What happens next
Clients can click directly through to payment, which can reduce delay between reminder and payment.
Common problems
- No "Pay invoice" link in my emails — check that your invoice source is Stripe (Xero/MYOB
don't yet provide a payment URL) or that your CSV import included a
payment_urlvalue. - Link goes to the wrong place — for CSV imports, re-import with the corrected
payment_url; for Stripe, the link comes directly from Stripe's invoice — update it in Stripe if needed.
