generated: '2026-06-20' method: searched source: https://docs.fatzebra.com/docs/testing environments: - name: sandbox gateway: https://gateway.pmnts-sandbox.io/v1.0 partner: https://gateway.pmnts-sandbox.io/v2/partners billing: https://billing.pmnts-sandbox.io/api/v1/ description: Full sandbox for gateway, partner and billing testing. - name: staging partner: https://gateway.pmnts-staging.io/v2/partners - name: production gateway: https://gateway.pmnts.io/v1.0 partner: https://gateway.pmnts.io/v2/partners auth: scheme: HTTP Basic note: 'Sandbox uses a separate test username + API token issued for the sandbox merchant. Responses include "test": true.' test_cards_3ds: note: 3DS2 test cards for the Sandbox environment. Each PAN triggers a predetermined 3DS outcome. Use any future expiry and any CVV unless a scenario says otherwise. successful_frictionless: visa: '4000000000001000' mastercard: '5200000000001005' amex: '340000000001007' result: Liability shift attempts_frictionless: visa: '4000000000001026' mastercard: '5200000000001021' amex: '340000000001023' result: Liability shift (stand-in auth) successful_stepup_otp: visa: '4000000000001091' mastercard: '5200000000001096' amex: '340000000001098' result: Liability shift (successful OTP challenge) unsuccessful_enrolment: visa: '4000000000002446' mastercard: '5200000000002037' amex: '340000000002732' error_code: '002' result: No liability shift unsuccessful_frictionless: visa: '4000000000001018' mastercard: '5200000000001013' amex: '340000000001015' result: No liability shift unsuccessful_stepup: visa: '4000000000001109' mastercard: '5200000000001104' amex: '340000000001106' result: Failed OTP challenge events: success: fz.sca.success error: fz.sca.error note: fatzebra.js emits these SCA events; 3DS result data in fz.sca.success qualifies the transaction for liability shift.