Skip to main content
Gruv Logo
Money Movement

Send a payment link. The invoice closes itself

Attach a signed link to INV-4821, send it to your client, and collect via card, ACH, or SEPA through hosted checkout. When they pay, the invoice marks paid, the wallet credits, and Xero gets the journal row.

Hosted checkoutCards, ACH, SEPAStripe reference on every rowXero and QuickBooks sync
Payment link
$4,500.00
Invoice#1024
ClientNorthstar Labs
Expires48 hours
Hosted checkout
Client session active
Card
Bank
Capture synced
Invoice, wallet, and provider ref matched

Built for the work after the pay button

Checkout is five minutes of work. Reconciliation is the other five hours. Gruv ties every paid invoice, retry path, and deposit back to the Stripe reference so your team knows what settled, whether a retry is safe, and which journal row finance closes against.

Every receipt names the invoice

  • Checkout shows INV-4821 on the receipt, not a generic transaction ID
  • Support traces any payment back to the original invoice in one click
  • Finance exports structured rows to Xero, not bank-statement PDFs

Double-clicks never double-charge

  • Clicking "Pay" twice creates one charge, every time
  • Webhook replays land on the original Stripe reference
  • Link, payment, and capture share one transaction contract

Every deposit ties to its invoice

  • Settlement, wallet credit, and ledger entry share one view
  • Stripe reference travels into every Xero or QuickBooks export row
  • Finance closes the period with a posted journal, not a reconciliation tab

Pick the collection model that fits your volume

Sending 20 invoices a month? Start with payment links and CSV exports. Processing 2,000? Wire events into Slack, your client portal, and QuickBooks from day one. Scale the integration as volume grows.

Invoice-linked payment requests

Send a signed link carrying INV-4821, the USD amount, and a 7-day expiry. When the client pays, the invoice closes and Xero gets the journal.

Hosted checkout in your client portal

Embed a hosted pay step inside your portal. The client sees the invoice, pays with card or ACH, and your portal reflects "Paid" without a page refresh.

Real-time event routing

Push capture, failure, and retry events into Slack, your support queue, or Workday. Your ops team sees the outcome before the client emails.

One-click reconciliation exports

Stripe reference, settlement date, fee breakdown, and wallet credit export in one row. Finance reviews the journal, not a stack of CSVs.

How it works

From payment link to closed invoice

Five steps take a payment request from signed link to reconciled journal row in Xero or QuickBooks.

gruv.app › collect › new request
collectrequestsnew

Payment request · inv_4823

Drafting
Invoice refinv_4823
ClientNorthwind Group
Amount$14,200.00
CurrencyUSD
Expiresin 7 days
MethodsCard · Bank transfer
Tokenized linkpreview

Signed token created

tok_2hN8aZ4Q · expires 2026-05-12T18:00Z

Idempotency key set

idem_d4f9

Invoice context attached

Frequently Asked Questions

How is this different from a normal Stripe payment link?+
A Stripe payment link stops at checkout. Gruv keeps the invoice reference, hosted checkout session, Stripe PaymentIntent ID, wallet credit, and Xero export row connected on one record. When finance asks "did INV-4821 settle?", the answer is one click away.
Can I connect this to QuickBooks or Xero?+
Yes. Start by sending invoice-linked payment requests and downloading reconciliation exports. Then wire webhook events into QuickBooks, Xero, your client portal, or Slack so paid invoices close themselves.
What payment methods can my clients use?+
Cards (Visa, Mastercard, Amex), ACH bank transfer, SEPA direct debit, and PayPal through hosted checkout. Method availability depends on your client's country and currency.
How do payment links stay secure?+
Every link uses a signed, expiring token validated server-side. Expired or tampered links reject the session immediately. Clicking "Pay" twice never creates two charges because each link generates exactly one payment intent.
Payment captured but the invoice still shows unpaid. What happened?+
A webhook delivery failed or arrived out of order. Gruv replays the capture event against the Stripe PaymentIntent ID until invoice status, wallet credit, ledger entry, and Xero export row all agree. No manual patching required.

Ready to send your first payment link that closes itself?

We wire the hosted checkout, connect your Xero or QuickBooks sync, and send the first invoice-linked collection before your next billing cycle.

Many teams start with a narrow launch in weeks; timelines depend on scope and integrations.