FastLinkIt

Creating a fundraising campaign

Payments & Donationsfundraisingdonationspayments4 min read

Fundraising campaigns let you accept one-off donations via Stripe or PayPal and share them anywhere with a short URL, embeddable widget, or GitHub README badge.

Prerequisites

You need at least one payment provider connected at /payments/providers:

  • Stripe Connect — must be active with charges enabled, OR
  • PayPal — must be connected and receivable

If neither is ready, your public donation page shows a friendly "not accepting donations yet" message instead of failing at checkout.

List vs create/edit

The fundraising UI is split into two pages:

  • /payments/campaigns — list view: summary cards, campaign grid, Embed/WhatsApp/GitHub/delete actions. Use this to see everything you've created.
  • /payments/campaigns/create — create a new campaign. Also linked from the NavMenu as New Campaign.
  • /payments/campaigns/{id}/edit — edit an existing campaign. Same form as create, pre-filled with the current values.

Creating a campaign

  1. Click New Campaign in the sidebar (or Create Campaign on /payments/campaigns)
  2. Fill in:
    • Title — short, memorable (used in the README badge label if you share on GitHub)
    • Description — shown on the public donation page; Markdown supported
    • Target amount — your goal, rendered as a progress bar
    • Currency — GBP, USD, EUR, and 11 others
    • Min / Max donation — caps on donation size (leave blank for no limit)
    • Suggested amounts — comma-separated (e.g. 5,10,25,50)
    • Allow custom amount — let donors type any value
    • End date (optional) — campaign stops accepting donations
    • Thank-you message — shown after successful donation
    • Image — optional hero image for the page and card
    • Short code (optional) — your URL will be flnk.it/{shortCode}. Leave blank to auto-generate.
  3. Click Save

Sharing your campaign

Back on the list page, each campaign card has four share actions:

  • Copy short link — copies flnk.it/{shortCode} to clipboard
  • WhatsApp — opens WhatsApp pre-filled with the link
  • Embed — opens a modal with copy-pasteable <script> HTML that renders the donation widget on any website (light/dark themes)
  • GitHub — opens a modal with a FUNDING.yml snippet and README badge Markdown. See Accept Donations on GitHub for the full walkthrough.

Editing and managing

  • Edit — pencil icon on the card; opens /payments/campaigns/{id}/edit
  • Toggle active — pause/resume donations without deleting
  • Delete — permanent; only allowed if no donations have been received

Tracking donations

Every donation creates a PaymentTransaction with Source tagged by where it came from (e.g. github, wordpress, api-direct). See the breakdown in:

  • /payments/transactions — filter by source and campaign
  • /payments/earnings — per-source revenue cards and charts

Redirect after donation

The donate widget (embedded via donate-widget.js) now passes the embedding page's URL as returnUrl, so donors land back on your site after Stripe Checkout — not on a generic success page. If you omit data-success-url from the embed, FastLinkIt uses window.location.href (the current page with port) so local dev donations work correctly.

Troubleshooting

Public donation page shows "not accepting donations yet." Neither Stripe nor PayPal is ready for the campaign owner. Connect at /payments/providers and complete onboarding.

Donation redirect goes to the wrong URL. Make sure the embed snippet uses the full URL (including port in dev) for data-success-url. Without it, the widget falls back to window.location.href.

Stripe errors about missing capabilities. If your Stripe Connect account was created before the CardPayments + Transfers capabilities fix, disconnect at /payments/providers and reconnect. New accounts get the right capabilities automatically.

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.