Money moves between people who love each other.
We built it like it matters.
Gish is a payments rail wearing a wishlist t-shirt. Behind the kitten-pink UI is a security and fraud posture closer to a fintech than a social app — because the moment your grandmother contributes to your honeymoon fund, we are no longer playing. Here is, in full, what we do to deserve that trust.
A single number, surfaced at every contribution moment.
Before a stranger drops $200 into a stranger’s honeymoon fund, they deserve a number that helps them decide. The Gish Trust Score is a 0–100 reputation score we compute for every account that ever receives money. It’s shown on every wishlist, every outcome fund, every payee receipt. It gates eligibility for the verified-payee tier.
What goes into the score
Five signals, weighted, computed on every transaction. Updated daily. Visible to the account holder. Components below.
Verification (30 pts). Email confirmed, phone confirmed, government ID matched (where verified-payee status is sought), Stripe Connect KYC/KYB cleared. Optional for low-value flows; required to receive money above thresholds.
Payment history (25 pts). Volume sent and received, time-on-platform, chargeback ratio, dispute rate. A clean record over time compounds.
Reciprocity (20 pts). Not just received — also sent. Accounts that only ever receive money score lower than accounts that participate. Reciprocity is the strongest single antidote to one-way fraud.
Fraud flags (15 pts). Any signal that landed: card-testing pattern, mismatched geolocation, velocity spikes, prior platform suspension. Decays slowly with good behavior, never to zero on confirmed flags.
Account age (10 pts). Time-on-platform, with a logarithmic curve. New users start with reasonable trust; a five-year clean account is meaningfully different.
Card-testing kills cousins of Gish weekly. We took it seriously.
If you accept card payments at internet scale, you are a card-testing target. Every consumer-facing payments platform either solves it or gets liquidated by chargebacks in eighteen months. Here is what we do.
Velocity throttles
Per-card, per-IP, per-device-fingerprint, per-account. Card declines counted on a sliding window. The first three failed attempts cost the attacker nothing; the fourth costs them everything (24-hour lockout with backoff).
Chargeback reserves
Stripe Connect reserves 7% of outgoing payouts for the first 90 days of a new payee. Verified payees release earlier. The reserve eats the dispute, not the platform.
Auto-suspend on threshold
If chargeback ratio crosses 0.65% over a 30-day window, payouts pause and the account routes to a human reviewer within the hour. Stripe’s threshold is 1%. We sit half a basis under that to never get there.
Device fingerprinting
Pseudonymized device fingerprint (FingerprintJS Pro). Used for fraud cross-reference only. Never sold, never used for ad targeting, deleted on account closure.
Sanctions screening
OFAC, EU, UK consolidated sanctions lists. Screened at KYC, re-screened daily on a rolling window. False positives kicked to manual review with named reviewer.
3-D Secure 2
SCA-strong by default in EU/UK/EEA. Step-up auth on US transactions above $250 or any cross-border above $100. Friction calibrated to risk, not blanket.
If you’re raising more than pizza money, we verify you in person before the cash moves.
Honeymoon funds, top surgery funds, “help me pay rent” funds, charity passthroughs — once a wish crosses a configurable threshold (default $500), the payee goes through verification before any funds release. Median time-in-queue is 38 hours; SLA is 72.
ID + selfie + tax form
Government ID (or 501(c)(3) registration), live selfie, and W-9 or W-8BEN for tax reporting. Encrypted in transit, encrypted at rest, deleted from operational systems after match.
Document forensics
Persona-grade document forensics: template match, watermark, hologram, OCR consistency, liveness on selfie. Edge cases bumped to humans.
Two-person review
Above $1,000 lifetime payout, two humans approve the verification. Reviewers are W-2 Gish employees, not contractors, working in a SOC-2 access-controlled environment.
Stripe Connect payout
Funds release to the verified payee’s linked bank. 1099-K issued automatically at year end for US payees over IRS threshold. Audit log preserved indefinitely.
501(c)(3) lookup via IRS Form 990. Outcome funds routed to nonprofits hit a live IRS Form 990 lookup. The EIN is verified, status is checked, the nonprofit’s mission statement is matched against the fund’s stated purpose. A nonprofit that lost its 501(c)(3) status three months ago does not slip through — we re-check weekly.
What “verified payee” gets you. A green check on your profile. Earlier reserve release. Higher Trust Score. Eligibility for outcome funds, group buys above $1,000, and tax-PDF generation. It is the only way to receive money above $5,000 lifetime.
If you gift a flight, your passport never touches our server in plaintext.
Experience gifts — flights, hotels, classes, dinners — require sensitive details: passport numbers, date of birth, dietary restrictions, accessibility needs, sometimes medical disclosures. We do not want that data. Our customers do not want us to have that data. So we built a vault that physically can’t betray you.
No single Gish employee can release $1,000 or any PII alone.
Every refund above $1,000, every PII release in response to a law-enforcement request, every account merge or deletion that touches money — requires two distinct Gish staff members with separate cryptographic keys to co-sign the operation. The audit log records both. No exceptions, including for the CEO.
This isn’t a policy. It’s enforced in code. The internal admin tool literally won’t execute a privileged action without two signatures. The second signer cannot be an automation; it has to be a different human approving from a different session. The transcript of the approval is appended to the audit log.
Why? Because the single biggest threat model for a consumer payments rail is not external attackers. It is internal abuse, social engineering of a single admin, or a coerced employee. The two-person rule defangs all three.
The frameworks, the auditors, the certificate IDs.
We publish our current and committed posture — not what we wish we had. Items marked LIVE are in production. Items marked QUEUED are in audit with a target date.
FTC § 255
Every affiliate-linked product carries a clear, machine-readable disclosure. Disclosed in the product card, in the tooltip, and in the API response. No dark-pattern affiliate routing, ever.
GDPR
Lawful basis documented per processing activity. DPA on file for every B2B customer. EU sub-processors enumerated and published. DSAR turnaround < 30 days; we average 11.
CCPA / CPRA
Do-not-sell honored at registration via Global Privacy Control. We do not sell personal information; the toggle is symbolic but you should have it. CCPA notice-at-collection on every form.
LGPD (Brazil)
Encarregado de Dados named. Portuguese DSAR flow. Storage and processing for BR users in compliant region with documented cross-border transfer mechanism.
PSD2 SCA
Strong Customer Authentication on every EU/UK/EEA payment over €30. 3-D Secure 2 step-up. Out-of-SCA exemptions logged and audited.
PCI DSS SAQ-A
We never see card data — Stripe Elements iframes capture it at the source and tokenize. We’re SAQ-A scope, the lowest possible for an e-commerce merchant.
SOC 2 Type II
In audit window. Type I attestation available on request today. Type II report covers security, availability, confidentiality, and privacy trust principles.
ISO 27001
ISMS scope finalized, gap analysis complete, audit booked. Statement of Applicability available under NDA.
k-anonymity ≥ 50
No data product, dashboard, or advertiser inventory segment is queryable below a k-anonymity floor of 50. If a cohort would expose fewer than 50 users, the row is suppressed. No exceptions.
We never sell user data. Not now, not ever, not at the IPO.
Advertisers buy inventory on Gish. They never buy identity. The targeting they use is built from Gish’s own first-party signals — occasion type, relationship category, budget band, region — never from a user’s name, email, address, payment instrument, or browsing history. An advertiser running a campaign for “Mother’s Day in Spain, budget €30–70” sees aggregate impression and conversion metrics, never a list of users who matched. The targeting happens server-side, behind our k-anonymity floor; the advertiser literally cannot ask for fewer than 50 people in a segment.
We will not change this when growth stalls. We will not change this when a board demands a higher ad ARPU. We will not change this when an acquirer kicks the tires. If we ever do change this, it will be a public, headline-grade announcement six months before it happens, and you can close your account on the way out with a one-click GDPR-grade data export.
6 locales. 6 currencies (33 by Q2 2026). Audited before launch, not after.
8 locales
English (US/UK), Spanish, Portuguese (BR), French, German, Japanese, Hindi, Mandarin. Locale-correct dates, numbers, currency symbols, name-order conventions, RTL-ready CSS for the next wave.
6 settlement currencies live (33 by Q2 2026)
Stripe Connect-backed. FX locked at order. Multi-jurisdictional tax handled at the line item (VAT, GST, sales tax, CT). VAT MOSS for EU digital goods.
Lighthouse 95+
Performance, accessibility, best-practices, SEO. Audited pre-launch and on every release. CI fails a deploy if any score drops below the threshold.
WCAG 2.2 AA
Color contrast, focus order, keyboard navigation, screen-reader semantics, prefers-reduced-motion respected. A11Y audit report at accessibility.html.
SCA across rails
3-D Secure 2 (cards), Open Banking SCA (UK/EU bank rails), passkey-based step-up for high-value actions. Friction tuned by risk, not blanket.
Multi-jurisdictional tax
Sales tax (US), VAT (EU/UK), GST (AU/IN/CA), CT (UAE). Filed where applicable; collection only where required. We don’t pad rates.
Found a bug? We pay, and we say thank you.
If you find a security vulnerability in Gish, report it to security@gishme.com. We have a published responsible-disclosure policy, a 90-day coordinated-disclosure window, and a bounty program for confirmed reports.
Contact: security@gishme.com
Encryption: https://gishme.com/.well-known/pgp-key.txt
Acknowledgments: https://gishme.com/security/hall-of-fame
Policy: https://gishme.com/security/disclosure-policy
Hiring: https://gishme.com/careers#security
Preferred-Languages: en, es, ja
Expires: 2027-12-31T23:59:59.000Z
# Bounty bands
Critical $5,000 – $25,000
High $1,500 – $5,000
Medium $300 – $1,500
Low $75 – $300
The questions we get from buyers and security teams.
“Where is data hosted?”
AWS, multi-region. US data in us-east-1 + us-west-2. EU data in eu-west-1 (Dublin) with documented Schrems II safeguards. BR data in sa-east-1 (São Paulo) for LGPD locality. Region pinning on the customer record.
“Sub-processors?”
Stripe (payments), AWS (hosting), Cloudflare (WAF/CDN), Postmark (transactional email), Persona (identity), FingerprintJS (fraud), Sentry (errors), Datadog (APM). Full list at trust.gishme.com, RSS-subscribable change feed.
“Encryption at rest?”
AES-256 at rest (AWS-managed KMS keys per environment). TLS 1.3 in transit, HSTS preload, certificate transparency monitored. Booking vault PII never sees a server key — it’s wrapped by an on-device key.
“Penetration testing?”
Annual third-party pen test by a CREST-accredited firm. Latest report (redacted summary) available under NDA. Bug bounty live year-round at the bands published above.
“Incident response?”
24/7 on-call rotation. Customer notification within 72 hours of confirmed personal data breach (GDPR Article 33 timeline). Status page at status.gishme.com with subscribable incident feeds.
“Data deletion?”
Account deletion clears operational stores within 7 days and analytical stores within 30. Required-by-law retention (tax records, fraud screening) preserved per jurisdiction. Documented in the privacy policy retention table.
The decisions that can’t be retrofitted.
Security teams know the truth: most posture is bolted on. A startup ships a payments feature, a fraud incident teaches them a lesson, they hire a CISO, the CISO retrofits the architecture into something defensible. The result is functional but expensive — six-figure annual security spend, slow product cycles, the perpetual sense that the next 0-day will be the one that goes the wrong way.
We started the other way. Three architectural decisions were locked into the design before the first gift was ever sent, because we knew they could not be added later without rebuilding everything on top of them.
The booking vault is on-device by default. If we had stored passports and travel details on our servers in plaintext for the first six months and then tried to move them to a Secure Enclave model later, it would have taken an engineering year and a multi-month migration window during which old data would have lived in two states. Instead, the very first version of the experience-gift product wrote ciphertext to the server and held the key on the device. Today the model is the same model. There is no “legacy plaintext bucket” for an attacker to find.
The two-person rule is in the admin tool, not in policy. We could have written a policy that said “admins should ask each other to co-sign refunds above $1,000.” That policy would be ignored under pressure, social-engineered by a clever attacker, and slowly forgotten as the team grew. Instead, the admin tool refuses to execute the action without two distinct cryptographic signatures. The policy is the code, not a wiki page.
The k-anonymity floor is in the query layer, not in dashboards. We could have said “advertisers should only see cohorts of 50+.” Instead, the query layer that serves both internal analytics and advertiser inventory refuses to return a row if the population is below 50. The advertiser cannot send a different request to bypass it because the floor is in the database, not in the UI.
These three choices feel like small architecture decisions. They’re actually the difference between “security incident” being a quarterly fire drill and being a quarterly non-event.
What we worry about, in order.
Public threat modeling is rare in consumer fintech. We’re publishing ours because the buyers we want to earn trust from will ask anyway, and we’d rather answer once on a page than fifty times in a sales call.
Account takeover
The single biggest practical risk to a money-moving consumer rail. Mitigated with mandatory MFA on any account that has ever received money, device-recognition step-up, passkey-first authentication, anomaly-based session re-auth on every payout request.
Insider abuse
A coerced, malicious, or socially-engineered employee. Mitigated by the two-person rule on PII and money releases, least-privilege admin tooling, quarterly access reviews, mandatory dual-employment-status background checks on anyone with production access.
Card-testing
The fraud model above. Velocity throttles, fingerprinting, hard auto-suspend before chargeback thresholds. We have not had a card-testing event drive a chargeback ratio above 0.3% in any rolling 30-day window since pilot.
Verified-payee fraud
Someone uses a real or synthetic identity to clear KYC then exfiltrates funds. Mitigated by the two-person human review on payouts above $1,000, reserves on new payees, behavioral monitoring on outflow patterns.
Sub-processor compromise
One of our vendors is breached. Mitigated by vendor risk assessment on every sub-processor, contractual breach-notification windows shorter than ours, the ability to fail over Stripe to a backup PSP in 48 hours.
Insider trading on Trust Score
Yes, really — if our Trust Score is materially predictive of which fundraisers succeed, someone could try to game it. Mitigated by anti-collusion logic, reciprocity weighting, and a flat refusal to expose the score formula publicly. The components are listed; the weights aren’t.
An actually-useful incident history.
Most companies publish a security page with an empty “Recent Incidents” section that says “no incidents to report.” That is either a lie or it’s a definition of “incident” so narrow it’s useless to the reader. We’re going to take a different approach. The status page at status.gishme.com lists every degradation, every partial outage, and every security-relevant event from the last 24 months. We classify them by severity (SEV1 through SEV5), publish post-mortems on SEV1 and SEV2 events within 30 days, and keep the historical record indefinitely.
If you’re doing diligence on us and you want the redacted internal post-mortem for any incident referenced on the status page, write to security@gishme.com. Under NDA, we’ll send you the full internal write-up: what happened, what failed, what we did, what changed in production, and what we’re doing differently. We will not pretend we’ve never had an incident. We will pretend we’ve handled the ones we’ve had well, because we have.