Platform

Built on Stripe. Your money, your account.

Givli never holds your funds. Donations flow donor → Stripe → your charity’s Stripe account. We take a platform fee on top. Payouts, reporting, chargebacks — all run through your own Stripe dashboard.

Payments architecture

Donor pays, Stripe settles, you own the balance

We use Stripe Elements on the client and Stripe Connect on the backend. Your charity has its own Stripe account; Givli just routes payments to it and takes a transparent platform fee.

Donor

Enters card in Stripe Elements.

Stripe

Charges, applies fee, routes settlement.

Your Stripe account

Money lands in your balance.

Why this matters: if Givli disappeared tomorrow, your donor history, payment methods, and scheduled subscriptions still live in your Stripe account. You aren’t locked into our infrastructure — you’re locked into Stripe’s, which you can keep using independently.
Multi-currency

Donors pay in their currency, you see it labeled correctly

Stripe creates the PaymentIntent in the donor’s selected currency. We store the native amount and currency on every transaction so your admin dashboard shows the real donation — not a miscoloured USD approximation.

  • •9+ currencies today
  • •Per-transaction currency in dashboards and exports
  • •Donor bank statement matches your receipt
USDnative
GBPnative
EURnative
AEDnative
SARnative
CADnative
EGPnative
AUDnative
QARnative

Security

What we do so you don't have to.

PCI offloaded

Card numbers never touch Givli. Tokenised by Stripe.js in the donor’s browser.

Signed webhooks

Every Stripe event verified with the webhook secret before we act on it.

Sanctum auth

Admin access via HTTP-only token cookies. No localStorage tokens.

Rate-limited endpoints

Payment + auth routes throttled at the application layer.

CSP locked down

Embed routes scope frame-ancestors to whitelisted charity domains.

Audit trail

Key admin actions logged — team role changes, refunds, deletions.

Reliability

How the system behaves when things go wrong.

Idempotent writes

Stripe writes + local record-payment both idempotent — retries are safe.

DB-backed dedupe

Stripe event IDs unique-constrained so retries never double-credit.

Transactional totals

Goal checks use lockForUpdate so concurrent donors never overflow.

Source of truth: Stripe

Refunds, disputes, settlement reconciled from Stripe webhooks.

Embedding

Drop Givli into your site

Per-charity iframe with domain whitelist. Copy the snippet from your dashboard, paste it into your CMS. Donations happen in-page; receipts come from Givli.

  • frame-ancestors locked to your domains
  • •Colour + button-radius customisation
  • •Works with Squarespace, WordPress, Webflow, static HTML
<!-- paste into your site -->
<iframe
src="https://givli.io/iframe-campaign/your-slug"
width="100%" height="820"
allow="payment *"></iframe>
Roadmap

What’s next

We publish changes as they ship — no vapourware deadlines.

Public API

Read-only first (transactions, campaigns, donors), then webhooks to your CRM.

More currencies

As Stripe enables them in Connect charity accounts we flip them on.

CRM integrations

Salesforce + HubSpot syncing evaluated after the API stabilises.

See the platform running your data

Sign up, connect your Stripe account, accept your first donation today.