Payment components for any web page

Drop production-ready payment UI into any site with a single script tag. Isolated iframes mean zero PCI scope — no build step required.

PCI DSS Level 1Iframe isolated15+ locales10 components

How it works

Three steps from zero to a live payment component.

Partner

Browser

VisaAcceptance SDK
1request token
3EC token

Backend Server

Node / Python / Java
2
POST /session
3
EC token
4
postMessageEC token
Visa Acceptance
VA

Acceptance Server

CGK2 / tokens + data
5VAP API calls

Iframe Components

Visa hosted / sandboxed

Iframe auth state machine

INITIALIZINGAUTH_REQUIREDAUTHENTICATED

Token expires → auth_required fires → resolve with new token, no page reload needed

SERVER

One API call to Acceptance Platform. The server validates your credentials and returns a short-lived session token.

FRONTEND

Pass the token to VisaAcceptance.render(). No bundler, no build step — drop into any web page in minutes.

AUTOMATIC

Auth flows, locale switching, theme propagation, real-time updates — all inside a sandboxed iframe. Card data never reaches your page.

Authentication

Your token, your control

Components never store credentials. Your backend issues a short-lived session token — the SDK passes it to the sandboxed iframe, which manages the auth state machine without any frontend code touching sensitive data.

01

Server generates a session token

Your backend calls the Acceptance Platform API and receives a short-lived sessionToken scoped to the current user.

02

SDK initialises with that token

Pass it to VisaAcceptance.init(). The SDK creates an isolated iframe session — no credentials ever touch your frontend code.

03

Component manages auth state internally

The iframe cycles through INITIALIZING → AUTH_REQUIRED → AUTHENTICATED. When a token expires, an auth_required event fires so you can refresh without a page reload.

Card data never touches your servers — it stays inside the iframe.
auth-setup.js
// 1. Init with event callback for auth lifecycle
VisaAcceptance.init({
  locale: 'en-US',
  onEvent: (type, payload) => {
    if (type === 'auth_required') {
      refreshToken();
    }
  },
});

// 2. Render — SDK handles iframe, sizing, and theming
VisaAcceptance.render('transactions', '#container');

// 3. Token refresh — call your backend, then re-init
async function refreshToken() {
  const token = await yourServer.refreshSession();
  VisaAcceptance.updateConfig({ /* new config */ });
}
INITIALIZINGAUTH_REQUIREDAUTH_IN_PROGRESSAUTHENTICATEDERROR

Auth states your component cycles through

What you get

Transactions

Data

Searchable, sortable transaction history with status indicators and export.

Search & filterPaginationCSV export
View documentation

Built for developers

Everything you need to ship payment features without becoming a payments expert.

PCI compliant by default

Iframe isolation keeps card data out of your scope. No audits, no liability.

15+ locales, RTL included

Pass a locale code and the component handles everything — currency, date formats, text direction.

Token-based auth

Short-lived server-issued tokens. No client credentials, no API keys in your frontend.

Zero build step

A script tag is all it takes. Works in legacy apps, CMSes, or any HTML page.

Ready to integrate?

Add your first payment component in under five minutes. Start with the sandbox and go live when you're ready.

Free sandbox · No credit card required