Stripe incorrect_pin Error — Causes, Fix & MRR Impact
The Stripe incorrect_pin error occurs when the PIN entered at a card reader is incorrect, causing the issuer to decline; this applies to card-present (e.g. reader) payments for SaaS or in-person scenarios processing subscription or one-time payments.
What this means
The PIN the customer entered at the card reader is wrong. They should try again with the correct PIN (typically 3 tries before lockout).
Why it happens
Customer typo
The customer mistyped their PIN when entering it on the reader.
Wrong PIN remembered
The customer entered a PIN they thought was correct but was not (e.g. old PIN after change).
Multiple cards
The customer used a PIN for a different card than the one inserted.
Reader or keypad issue
Rarely, a keypad or reader could misread or send wrong digits; retry usually resolves.
MRR Impact
For terminal/reader flows, allowing PIN retry with clear messaging avoids failed transactions and supports MRR where in-person or hybrid is used.
PIN errors on reader flows are resolved by retry with correct PIN; limit attempts to avoid lockout.
Avg. recovery rate: High when customer can retry with correct PIN; limit retries to avoid lockout.
Urgency: within 24hHow to fix it
- 1
Prompt for PIN retry
When decline_code is incorrect_pin, show a clear message asking the customer to re-enter their PIN. Do not expose the raw code in the customer UI.
- 2
Limit PIN attempts
Allow a limited number of PIN attempts (e.g. 3) per transaction or session. After that, ask the customer to use another card or payment method to avoid issuer lockout.
- 3
Use Stripe Terminal best practices
If using Stripe Terminal, follow the recommended flow for collecting PIN and handling errors. Use the SDK's error handling to show appropriate messages.
- 4
Do not log PIN values
Never log or store the PIN. Log only that incorrect_pin occurred and attempt count for analytics.
- 5
Differentiate from CVC for online
For online flows you will not get incorrect_pin; you may get invalid_cvc or incorrect_cvc. Ensure your error handling maps the right message (PIN for terminal, CVC for online).
Detect incorrect_pin automatically
Track incorrect_pin rate for terminal flows; high rate may indicate UX or reader issues.
Monitor your Stripe health free →