Overview
Horsify automatically tracks payment failures on event registrations and provides organisers with tools to resend payment links and clean up orphaned registrations. When a rider's checkout session does not complete successfully, a background process polls for the payment status and increments a failure counter. After five unsuccessful checks, the registration is marked as PaymentFailed, giving organisers clear visibility into problem payments and the ability to act.
Purpose: Give organisers visibility into failed payments and self-service tools to recover revenue by resending payment links or removing dead registrations, without needing to contact support.
Who Uses This
- Organisers (Admin): View failed-payment registrations, resend payment links, and delete orphaned registrations from the organisation registration dashboard.
- Global Admins: Same capabilities across all organisations from the global admin registration dashboard.
- Riders: Receive a new checkout email when an organiser resends a payment link.
Key Features
1. Automatic Payment Failure Detection
A background process periodically checks for the status of outstanding checkout sessions. After five unsuccessful attempts, the registration status is automatically changed from Pending Payment to PaymentFailed.
2. Resend Payment Link
Organisers can resend a fresh checkout link to a rider whose registration is in PaymentFailed or PendingPayment status. The system:
- Validates the registration status
- Creates a new checkout session with the correct amount
- Resets the failure counter and reverts the status to PendingPayment
- Sends the new checkout link via email to the registrant
2a. Adjust a Line Price Before Sending the Link
The payment link bills the registration's outstanding balance, so the figure to change when a rider should pay something other than the advertised price is the registration itself, not the link. On the registration detail page every session/ticket line carries an Adjust price action. It sets the unit price of that one line by hand — for example to honour the $10 a rider was quoted before the ticket went to $30, or to make a committee member's entry free — and then runs the same amendment path as every other change: the registration total is recomputed, the live invoice is rewritten (with the reason, if one was given, in its notes), and the rider can optionally be emailed the amended confirmation and invoice.
- The line is marked Adjusted price on every surface, with the advertised figure beside it ("Adjusted price $10.00 (standard $30.00)"), so the invoice cannot be mistaken for a data error.
- An adjusted line keeps its figure through later amendments: "Edit Sessions & Tickets" re-prices every other line from the ticket but leaves an adjusted line alone. Setting the price back to the ticket's advertised figure clears the adjustment.
- Nothing moves money. A reduction on an unpaid registration lowers what the payment link bills; a reduction on a paid registration is reported as an overpayment for the organiser to refund from the payment record; an increase becomes an amount owing.
Endpoint: PUT /api/organisations/{orgId}/registrations/{registrationId}/session-selections/{selectionId}/price (organisation admin or platform admin — the same people who may send the link).
3. Delete Orphaned Registrations
Organisers can permanently delete registrations that are stuck in Cancelled, PaymentFailed, or PendingPayment status. This cleans up registrations where the rider never completed payment and frees capacity.
4. Payment Type Restrictions
For some Stripe account configurations, the available payment methods at checkout are restricted to those your organisation has configured fees for. If no fee configurations exist, card payment is always available as a fallback.
How to Use
Resending a Payment Link
- Navigate to Organiser Dashboard → Registration Management (or Admin Dashboard → Registrations for global admins)
- Locate the registration with status PaymentFailed or PendingPayment
- Click the "Resend Payment Link" button (amber-coloured)
- Review the confirmation dialog showing the rider's email and payment amount
- Click "Send Payment Link" to confirm
- The rider receives a new checkout email with a fresh payment link
Honouring a Different Price for One Rider
- Open the registration from Registration Management (the detail page, not the list)
- In Session Selections, click Adjust price on the line
- Enter the new price each (0 makes the line free) and, optionally, a reason for the invoice
- Leave Email the amended invoice to the rider ticked if the rider should hear about it now
- Click Save price — the registration total and invoice update immediately
- Click Resend Payment Link (or Send Payment Link) — the link bills the new outstanding balance
Deleting an Orphaned Registration
- Navigate to Organiser Dashboard → Registration Management
- Locate a registration with status Cancelled, PaymentFailed, or PendingPayment
- Click the "Delete" button (red-coloured)
- Review the confirmation dialog — this action is permanent
- Click "Delete Permanently" to confirm
- The rider receives an email notification that their registration has been removed
Related Features
- Payment Fees Configuration — Configure processing fees per payment type
- Tax Invoices — Invoice generation for completed payments
- View Registrations — Registration dashboard overview
-
Payment Dashboard — Payment tracking and reporting\n\n---\n\nSource:
wiki/features/PAYMENT_RETRY_LINKS.md\nLast synced: 2026-09-07 11:46:50 UTC