Never miss a payment
An agnostic payment vault can slide into any payment stack without disrupting business.
An agnostic payment vault can slide into any payment stack without disrupting business.
Whether a customer is renewing a subscription with a credit card or paying with Apple Pay or Google Pay, you can tokenize the data to make it secure and usable—while staying compliant with PCI, SOC 2 Type II, ISO 27001, and HIPAA regulations.
Whether a customer is renewing a subscription with a credit card or paying with Apple Pay or Google Pay, you can tokenize the data to make it secure and usable—while staying compliant with PCI, SOC 2 Type II, ISO 27001, and HIPAA regulations.
Whether a customer is renewing a subscription with a credit card or paying with Apple Pay or Google Pay, you can tokenize the data to make it secure and usable—while staying compliant with PCI, SOC 2 Type II, ISO 27001, and HIPAA regulations.
Increase basket size and brand loyalty by combining omnichannel data into a single point of view.
Increase basket size and brand loyalty by combining omnichannel data into a single point of view.
Improve the customer experience
Improve the customer experience
Improve the customer experience
Condense the tech stack while adding redundancy
Condense the tech stack while adding redundancy
Condense the tech stack while adding redundancy
Consolidate data from multiple brands or data sources
Consolidate data from multiple brands or data sources
Consolidate data from multiple brands or data sources
import { basistheory } from '@basis-theory/web-elements'; let bt; let cardNumberElement; let cardExpirationDateElement; let cardVerificationCodeElement; async function init() { bt = await basistheory('<API_KEY>'); // Creates Elements instances cardNumberElement = bt.createElement('cardNumber', { targetId: 'myCardNumber' // (custom) used for tracking validation errors }); cardExpirationDateElement = bt.createElement('cardExpirationDate', { targetId: 'myCardExpiration' }); cardVerificationCodeElement = bt.createElement('cardVerificationCode', { targetId: 'myCardVerification' }); // Mounts Elements in the DOM in parallel await Promise.all([ cardNumberElement.mount('#cardNumber'), cardExpirationDateElement.mount('#cardExpirationDate'), cardVerificationCodeElement.mount('#cardVerificationCode'), ]); // Binds card brand to verification code element cardNumberElement.on('change', ({ cardBrand }) => { cardVerificationCodeElement.update({ cardBrand }); }); }




import { basistheory } from '@basis-theory/web-elements'; let bt; let cardNumberElement; let cardExpirationDateElement; let cardVerificationCodeElement; async function init() { bt = await basistheory('<API_KEY>'); // Creates Elements instances cardNumberElement = bt.createElement('cardNumber', { targetId: 'myCardNumber' // (custom) used for tracking validation errors }); cardExpirationDateElement = bt.createElement('cardExpirationDate', { targetId: 'myCardExpiration' }); cardVerificationCodeElement = bt.createElement('cardVerificationCode', { targetId: 'myCardVerification' }); // Mounts Elements in the DOM in parallel await Promise.all([ cardNumberElement.mount('#cardNumber'), cardExpirationDateElement.mount('#cardExpirationDate'), cardVerificationCodeElement.mount('#cardVerificationCode'), ]); // Binds card brand to verification code element cardNumberElement.on('change', ({ cardBrand }) => { cardVerificationCodeElement.update({ cardBrand }); }); }


import { basistheory } from '@basis-theory/web-elements'; let bt; let cardNumberElement; let cardExpirationDateElement; let cardVerificationCodeElement; async function init() { bt = await basistheory('<API_KEY>'); // Creates Elements instances cardNumberElement = bt.createElement('cardNumber', { targetId: 'myCardNumber' // (custom) used for tracking validation errors }); cardExpirationDateElement = bt.createElement('cardExpirationDate', { targetId: 'myCardExpiration' }); cardVerificationCodeElement = bt.createElement('cardVerificationCode', { targetId: 'myCardVerification' }); // Mounts Elements in the DOM in parallel await Promise.all([ cardNumberElement.mount('#cardNumber'), cardExpirationDateElement.mount('#cardExpirationDate'), cardVerificationCodeElement.mount('#cardVerificationCode'), ]); // Binds card brand to verification code element cardNumberElement.on('change', ({ cardBrand }) => { cardVerificationCodeElement.update({ cardBrand }); }); }




import { basistheory } from '@basis-theory/web-elements'; let bt; let cardNumberElement; let cardExpirationDateElement; let cardVerificationCodeElement; async function init() { bt = await basistheory('<API_KEY>'); // Creates Elements instances cardNumberElement = bt.createElement('cardNumber', { targetId: 'myCardNumber' // (custom) used for tracking validation errors }); cardExpirationDateElement = bt.createElement('cardExpirationDate', { targetId: 'myCardExpiration' }); cardVerificationCodeElement = bt.createElement('cardVerificationCode', { targetId: 'myCardVerification' }); // Mounts Elements in the DOM in parallel await Promise.all([ cardNumberElement.mount('#cardNumber'), cardExpirationDateElement.mount('#cardExpirationDate'), cardVerificationCodeElement.mount('#cardVerificationCode'), ]); // Binds card brand to verification code element cardNumberElement.on('change', ({ cardBrand }) => { cardVerificationCodeElement.update({ cardBrand }); }); }


Keep recurring revenue flowing with smart retries, token updates, and backup routing.
Keep recurring revenue flowing with smart retries, token updates, and backup routing.
Increase revenue by improving conversion and authorization rates.
Increase revenue by improving conversion and authorization rates.
Increase revenue by improving conversion and authorization rates.
Smart routing to reduce churn through backup PSP.
Smart routing to reduce churn through backup PSP.
Smart routing to reduce churn through backup PSP.
Tie billing to individual PSP.
Tie billing to individual PSP.
Tie billing to individual PSP.
Future-proof your platform.
Let merchants bring their own PSPs—or become one yourself.
Future-proof your platform.
Let merchants bring their own PSPs—or become one yourself.
Create more revenue without acquiring new customers.
Create more revenue without acquiring new customers.
Create more revenue without acquiring new customers.
Enable a merchant to bring their own PSP.
Enable a merchant to bring their own PSP.
Enable a merchant to bring their own PSP.
import { basistheory } from '@basis-theory/web-elements'; let bt; let cardNumberElement; let cardExpirationDateElement; let cardVerificationCodeElement; async function init() { bt = await basistheory('<API_KEY>'); // Creates Elements instances cardNumberElement = bt.createElement('cardNumber', { targetId: 'myCardNumber' // (custom) used for tracking validation errors }); cardExpirationDateElement = bt.createElement('cardExpirationDate', { targetId: 'myCardExpiration' }); cardVerificationCodeElement = bt.createElement('cardVerificationCode', { targetId: 'myCardVerification' }); // Mounts Elements in the DOM in parallel await Promise.all([ cardNumberElement.mount('#cardNumber'), cardExpirationDateElement.mount('#cardExpirationDate'), cardVerificationCodeElement.mount('#cardVerificationCode'), ]); // Binds card brand to verification code element cardNumberElement.on('change', ({ cardBrand }) => { cardVerificationCodeElement.update({ cardBrand }); }); }




import { basistheory } from '@basis-theory/web-elements'; let bt; let cardNumberElement; let cardExpirationDateElement; let cardVerificationCodeElement; async function init() { bt = await basistheory('<API_KEY>'); // Creates Elements instances cardNumberElement = bt.createElement('cardNumber', { targetId: 'myCardNumber' // (custom) used for tracking validation errors }); cardExpirationDateElement = bt.createElement('cardExpirationDate', { targetId: 'myCardExpiration' }); cardVerificationCodeElement = bt.createElement('cardVerificationCode', { targetId: 'myCardVerification' }); // Mounts Elements in the DOM in parallel await Promise.all([ cardNumberElement.mount('#cardNumber'), cardExpirationDateElement.mount('#cardExpirationDate'), cardVerificationCodeElement.mount('#cardVerificationCode'), ]); // Binds card brand to verification code element cardNumberElement.on('change', ({ cardBrand }) => { cardVerificationCodeElement.update({ cardBrand }); }); }


import { basistheory } from '@basis-theory/web-elements'; let bt; let cardNumberElement; let cardExpirationDateElement; let cardVerificationCodeElement; async function init() { bt = await basistheory('<API_KEY>'); // Creates Elements instances cardNumberElement = bt.createElement('cardNumber', { targetId: 'myCardNumber' // (custom) used for tracking validation errors }); cardExpirationDateElement = bt.createElement('cardExpirationDate', { targetId: 'myCardExpiration' }); cardVerificationCodeElement = bt.createElement('cardVerificationCode', { targetId: 'myCardVerification' }); // Mounts Elements in the DOM in parallel await Promise.all([ cardNumberElement.mount('#cardNumber'), cardExpirationDateElement.mount('#cardExpirationDate'), cardVerificationCodeElement.mount('#cardVerificationCode'), ]); // Binds card brand to verification code element cardNumberElement.on('change', ({ cardBrand }) => { cardVerificationCodeElement.update({ cardBrand }); }); }




import { basistheory } from '@basis-theory/web-elements'; let bt; let cardNumberElement; let cardExpirationDateElement; let cardVerificationCodeElement; async function init() { bt = await basistheory('<API_KEY>'); // Creates Elements instances cardNumberElement = bt.createElement('cardNumber', { targetId: 'myCardNumber' // (custom) used for tracking validation errors }); cardExpirationDateElement = bt.createElement('cardExpirationDate', { targetId: 'myCardExpiration' }); cardVerificationCodeElement = bt.createElement('cardVerificationCode', { targetId: 'myCardVerification' }); // Mounts Elements in the DOM in parallel await Promise.all([ cardNumberElement.mount('#cardNumber'), cardExpirationDateElement.mount('#cardExpirationDate'), cardVerificationCodeElement.mount('#cardVerificationCode'), ]); // Binds card brand to verification code element cardNumberElement.on('change', ({ cardBrand }) => { cardVerificationCodeElement.update({ cardBrand }); }); }


Add redundancy to protect against being shut down by a single PSP.
Add redundancy to protect against being shut down by a single PSP.
Keep conversion rates high.
Keep conversion rates high.
Keep conversion rates high.
Use customer data without the burden of protection.
Use customer data without the burden of protection.
Use customer data without the burden of protection.