Security

Built so a mistake can’t move money.

Card data never reaches us. Keys do only what you allow. Agents ask before they spend. Every API write is safe to retry, so a timeout never becomes a double charge.

Card numbers never reach us Safe to retry People decide
Card data

Card numbers never pass through us.

Payers type their card into secure fields that send it straight to our PCI DSS Level 1 card processor, and Tuppence gets back a token. Card numbers stay out of our servers, logs, SDKs and tests, and Tuppence stays in the shortest PCI DSS self-assessment, SAQ A.

Checked on every change

Every build scans our code and browser files for anything shaped like a card number, and fails if it finds one.

Redacted even if you send one

We strip secrets and anything that looks like a card number from every log line, even inside a payment’s description.

A locked-down pay page

Our hosted pay pages run a strict Content Security Policy, checked on every build, so nothing but our card processor can receive card data.

Tuppence cards too

Tuppence card details appear in a secure frame in your browser, never through our servers. We hold only the card’s ID and last four digits.

Your account

Keys, people and records.

Scoped API keys

Secret, publishable and restricted keys, separate for test and live. A restricted key has only the permissions you give it, and an IP allowlist can pin a key to your servers.

Leaked-key response

If a secret key turns up somewhere public, we revoke it at once and alert you.

Two-factor sign-in

Codes from an authenticator app, or by text message once texts are switched on. Roles limit who can refund or change settings, and the app asks for Face ID before a refund or unfreezing a card.

Audit log

Who changed what, and when: keys, team members and settings.

Request logs

Every API request for 30 days: what your code sent and what came back. Secrets are removed before storage.

Signed webhooks

Every event is signed, so your server can verify it came from us. Rotate the signing secret at any time.

Fraud prevention

Trust that grows with your history.

Fraud costs honest businesses most. We check who we work with, monitor activity, and give each account more room as it trades cleanly.

A person reviews new businesses

Someone on our team reviews every business before it takes live payments.

Identity checks

The people behind a business confirm who they are with a photo ID and a selfie, checked by our identity verification partner.

Automatic monitoring

We watch for card testing, sudden spikes and other signs of non-genuine sales, and can hold payouts while we investigate.

Limits that grow

New accounts start with limits on payments and payouts, and a rolling reserve. They ease as you build a clean trading history.

Nothing hidden

The dashboard and the app show your limits, your usage and any hold, with what we need from you to lift it.

In our terms

Our terms set out how limits, holds and reserves work.

AI agents

Agents can ask. People decide.

Agents get their own keys and identities. Tuppence enforces every limit outside the model, so no prompt can get past one.

Only the tools it needs

An agent on a restricted key sees only the MCP tools its permissions allow.

Hard limits on cards

Per-card limits, allowed merchant types and countries, and a person’s approval above an amount you set, checked in real time on every purchase.

Payers approve

A payment an agent starts waits for the payer on a hosted page. A saved card is charged only under terms the payer agreed to, and unusual charges can ask them to authenticate again.

Signed identities

Agents can sign each request with their own key pair, so anyone can verify which agent did what.

Infrastructure

How it runs.

Google Cloud, in London

Tuppence runs on Google Cloud in the europe-west2 (London) region, on a Postgres database with point-in-time recovery.

Encrypted twice

Everything is encrypted in transit and at rest. Our application encrypts the secrets we hold for you a second time, with keys in Secret Manager.

Safe to retry

Every write takes an idempotency key, so a retried request returns the first answer instead of acting twice.

Reconciled every night

Our ledger is reconciled with our card processor’s records every night, and our team is alerted to any difference.

Kill switches

Our team can pause new payments or payouts across the platform within seconds. Refunds are never paused.

Deploys without stored keys

Deploys use short-lived federated credentials for Google Cloud. Our build system holds no long-lived cloud keys.

Certifications

Independently checked.

We publish each one when it’s complete.

PCI DSS SAQ A

Only our card processor’s secure fields handle card data, which keeps us in the lightest scope of the standard. Our card processor, Stripe, Inc., is a PCI DSS Level 1 service provider.

Penetration test

An independent test of the API, dashboard and pay pages is not done yet. We’ll publish a summary here when it is.

SOC 2

We don’t hold a SOC 2 report yet. We’ll list it here once an audit of our security, availability and confidentiality controls is complete.

UK GDPR

How we handle personal data: see our privacy notice.

Responsible disclosure

Found a vulnerability? Tell us.

Email support@tuppence.ai with “Security report” in the subject. Give us reasonable time to fix it before telling anyone else. Test only with your own test-mode account, and never use real card numbers or other people’s data. We’ll reply, keep you updated and credit you if you wish.

Send a report