Overview

An interactive playground that exercises every code path on the SKN Pay Payments API. Pick a scenario from the sidebar to see what it does, what code drives it, and what you should observe.

How it works. Each scenario either redirects you to the hosted payment page (for scenarios that need a customer interaction — paying, declining, etc.) or runs an API-only flow on the server (for scenarios like cancel and idempotency that don't need a browser). Every payment created, redirect landed, and webhook received gets logged on the Event log — scoped to your session, no other visitor can see it.

Scenarios

ScenarioWhat it tests
✓  Standard checkoutHappy-path approval. Pay with 4111…Open →
⚡  3DS frictionlessSilent 3DS. Pay with …2701Open →
🔐  3DS challengeIssuer OTP. Pay with …2420Open →
✗  Declined cardDecline → payment.failedOpen →
⊗  Cancel before payCreate then cancel via APIOpen →
🔁  Idempotency-KeyDouble-POST returns same idOpen →
↩  Refund a paymentRefund a recent successOpen →

Recent activity

No activity yet. Run a scenario from the sidebar.

About this playground

Per-session scoped. Your event log, recent payments, and webhooks are private to your browser session — set by an HttpOnly cookie. Other visitors hit the same site but see only their own activity. State resets if you clear cookies or after 24 hours of inactivity.

Test mode only. Every scenario runs against a sk_test_… key. No real cards charged, no real money moved.

Open and shareable. No login. Send the URL to anyone evaluating SKN Pay; they can run scenarios and see the code without an account.

Setup checklist

  1. Generate a sk_test_… key at app.sknpay.com → Settings → API keys and put it in .env as SKNPAY_API_KEY.
  2. Add a webhook endpoint at Settings → Webhooks pointing at https://sknpay-test-integrator.fly.dev/webhooks/sknpay. Subscribe to all four events.
  3. Copy the whsec_… secret it shows once and put it in .env as WEBHOOK_SECRET. Restart this app.

Status: webhook secret configured