Skip to main content
Ship Responsibly

Payments Compliance in Plain English (PCI Basics)

PCI in plain English for solo builders: what payment-card compliance actually asks of you, why using a compliant provider and never storing card data is the whole game, and where you must get professional confirmation.

You want to charge customers. You wired up a checkout, or you're about to, and then you hit the phrase "PCI compliance" and everything stalls. It sounds like a legal minefield with fines attached, and you can't tell whether using a payment provider already covers you or whether you're quietly on the hook for something you don't understand.

Here's the calm version. For a solo builder using a reputable payment provider the right way, PCI is mostly about one decision, made once, at the start. Get that decision right and you stay in the easy lane. Get it wrong and you take on obligations you are not equipped to meet. This post explains the decision in plain terms so you can tell which side of the line you're on.

One thing up front, and it matters: this is educational only, not legal or compliance advice. PCI DSS scope depends on your exact setup. Confirm it against your payment provider's current documentation, and use qualified PCI help before launch if card data touches your systems or the scope is unclear. Treat this as a map, not a setup-specific assessment.

In Plain English: PCI is about who touches the card number

PCI DSS is the Payment Card Industry Data Security Standard for protecting account data. Use the PCI Security Standards Council's current document library and your payment provider's integration guidance; do not rely on a blog post for the applicable version or validation path.

The single most useful idea to hold onto is this: your obligations scale with how close your systems get to raw card data. If card numbers flow through your servers, sit in your database, or show up in your logs, you are "in scope" for a long list of security requirements. If the card number never touches your systems at all, your obligations shrink dramatically.

That's the lever. Almost everything else about PCI for a solo builder comes down to keeping the card number away from your app.

The one rule that keeps you in the easy lane

Never store, log, or handle raw card data yourself. Let a compliant provider capture it, and let it never reach your servers.

That's it. That's the rule. When you use a provider like Stripe, PayPal, or a similar processor, and you use their intended flow, the card number is captured directly by the provider's systems. Your app never sees it. Instead of a card number, your app receives a token: a safe reference (something like a customer ID or a payment method ID) that lets you charge the card through the provider without ever holding the sensitive digits.

Think of the token as a coat-check ticket. You hold the ticket. The provider holds the coat. You can ask them to do things with the coat, but the coat never sits in your closet, so you're not responsible for guarding it.

This is why "use a compliant provider and don't store card data" is repeated so often. It isn't a slogan. It's the actual mechanism that keeps the heavy PCI requirements off your plate.

How compliant providers and hosted checkout shift the burden

There are a few common patterns that keep card data out of your systems. From simplest to slightly more involved:

PatternWhat happensWho touches the card number
Hosted checkout / payment pageYou redirect the customer to the provider's page, or open the provider's pre-built payment sheetThe provider only
Provider-hosted fieldsThe card entry boxes on your page are actually served and controlled by the provider, embedded in your layoutThe provider only
Payment link / invoiceYou send the customer a provider-generated link to payThe provider only

The pattern that keeps you furthest from trouble is hosted checkout: the customer clicks "pay," lands on the provider's secure page (or a provider-controlled component), enters their card there, and comes back to your app with a result. Your app never renders a raw card field and never receives the number.

The reason this matters for scope is that even when the card fields appear to be "on your site," if they are actually served and handled by the provider's code, the sensitive data is captured by the provider, not by you. Your responsibility narrows to things you can realistically handle: keeping your account credentials safe, using the provider's official libraries, not pasting secrets into the wrong place, and serving your pages over HTTPS.

Two practical notes:

  • This is a documentation exercise, not a hands-on test. Which exact flows a provider offers, and what each one implies for your scope, comes from that provider's own PCI and integration docs. Read them, or have someone read them with you. Don't rely on a summary (including this one) as the final word.
  • Keys are part of the story. Hosted checkout keeps card numbers away from you, but you still hold API keys that can move money. Handling those correctly is its own topic, covered in adding Stripe payments without leaking keys.

The SAQ question and why your provider's docs are the source of truth

At some point you'll run into the term SAQ, the Self-Assessment Questionnaire. In plain terms, it's a checklist you (or your business) may be expected to complete to attest that you're handling card data appropriately. Which questionnaire applies, and what it asks, depends entirely on how you accept payments, and specifically on how much card data touches your environment.

Here is the important part for a non-technical builder: you do not guess which SAQ applies, and you do not invent the thresholds. Your payment provider publishes guidance on what integration method maps to what obligations, and a qualified professional (a QSA, your provider's support, or a compliance advisor) confirms it for your specific case. The categories, the questionnaire types, any fees, and any levels are defined by the standard and the provider, not by a blog post and not by your best guess.

So the honest answer to "which SAQ am I?" is: read your provider's PCI documentation, then confirm with a professional. That's not a dodge. Getting this from the authoritative source is the correct process, and anyone who hands you a specific SAQ type without looking at your setup is guessing too.

Red flags that mean you're taking on more than you think

This is the detection-first part. You don't need to memorize the standard. You need to notice when your setup is drifting into "you now hold card data," because that's the moment your obligations jump. If you see any of the following, stop and get expert review before going further.

  • You (or your AI tool) built your own card entry form that posts the card number to your own backend. If a raw card number ever arrives at a server you control, you've pulled card data into your scope.
  • Card numbers appear in your logs. Search your logs and error reports. If you can see full or partial card numbers, security codes, or expiry data anywhere in your logging, that's a serious problem to fix, not something to work around.
  • Card data is being pasted somewhere. Into a spreadsheet, a support ticket, a chat message, a "notes" field, a database column. Any place a human or your app copies a card number is a place you now have to protect.
  • You're storing the security code (CVV/CVC). This is a bright-line no. The security code is not meant to be stored after authorization, full stop.
  • Your AI-built app "helpfully" saves card details so customers don't re-enter them. Saved cards are legitimate, but only when the provider stores the card and hands you a token. If your own database holds the digits, you've crossed the line.
  • You can't answer "where does the card number go?" If you genuinely don't know the path a card number takes through your app, treat that as a red flag until someone who does know has traced it.

The through-line: every one of these is a case where raw card data touches something you own. The fix is never to log less or hide it better. The fix is to route the card data back to the provider so it never reaches you, then delete anything sensitive you accidentally captured, with professional guidance on how to do that safely.

Because these patterns are exactly the kind of thing that slips in when a tool generates code you didn't fully read, it's worth pairing this with a broader security pass. If you're weighing whether your situation is over your head, when to hire a security professional covers where that threshold sits. And because card data is one flavor of sensitive data, it's worth checking whether does your app handle personal data in other ways too.

Confirm your scope before launch

I'll say the uncomfortable part plainly: reading this does not make you PCI compliant. Nothing you read makes you compliant. Compliance is about your actual setup matching the actual requirements, confirmed by someone qualified to judge it.

What this post can do is get you to the right starting point:

  1. Use a reputable, compliant payment provider.
  2. Use their hosted checkout or provider-controlled fields so the card number never reaches your servers.
  3. Store tokens, never card numbers or security codes.
  4. Scan your logs and database for any card data that leaked in, and remove it with guidance.
  5. Read your provider's PCI documentation to understand which obligations apply to your integration.
  6. Get a qualified professional to confirm your scope and questionnaire before you take a real payment.

Payments, logins, and personal data are the three areas where a solo builder should not rely on their own judgment alone. For payments specifically, the threshold is simple: before you accept your first live card, have your setup confirmed by your provider's documentation and a qualified professional. That's not optional caution. That's the required step.

This slots into the wider pre-launch picture in Ship Responsibly: What You Need Before You Launch a Solo App, and you can find the surrounding payment, security, and privacy guidance on the Ship Responsibly hub.

In Plain English

What it means: PCI is a security standard for handling payment card data, and for a solo builder the whole game is keeping the card number out of your own systems by using a compliant provider's hosted flow and storing only tokens.

Who it helps: Non-technical builders adding payments to an app they built with AI or no-code tools, who are unsure whether "using a payment provider" already covers them.

When to use it: Before you wire up checkout, and again if you ever notice card data touching your forms, logs, or database.

What to do next: Confirm your provider handles the card capture, verify no card numbers reach your servers, and read the provider's current PCI documentation. If card data touches your systems or the scope is unclear, verify the setup with a qualified professional. This post is educational only and is not legal or compliance advice.

A few quick questions

Does using Stripe or PayPal automatically make me PCI compliant? Using a compliant provider with their intended hosted flow does most of the heavy lifting, because the card data never reaches you. But "automatically compliant" isn't a thing you can assume. You still have obligations, and the specifics must be confirmed with your provider's documentation and a professional.

If I never see the card number, do I have zero responsibility? No, but you have much less. You're still responsible for your account credentials, API keys, using official libraries, HTTPS, and not accidentally capturing card data elsewhere. The scope is smaller and more manageable, which is the point.

Can I store cards so customers don't re-enter them? Yes, when the provider stores the card and gives you a token to reuse. You store the token. You never store the raw card number or security code yourself.

Which SAQ do I need? That depends on your exact integration, and it's defined by the standard and your provider, not by a guess. Read your provider's PCI guidance and have a professional confirm it.

Your next step

Before you wire up payments, walk your setup through the security self-audit and trace one honest question all the way through: "where does the card number actually go?" Confirm the answer against your provider's current documentation, and do not take a live payment while card data reaches your systems or the applicable scope remains unclear. Use qualified PCI help to resolve either case. For how affiliate and tool mentions work here, see our disclosure and educational-only policy.


Kodbe is an independent commercial publication about maintaining and owning software built with AI or no-code tools. It is not affiliated with Kodbe Inc, Kodobe, Kodable, or Kodu.