Serverside rendered ButtonJS

Usage no npm install needed!

<script type="module">
  import paypalSmartPaymentButtons from 'https://cdn.skypack.dev/@paypal/smart-payment-buttons';


PayPal Smart Payment Buttons

build status code coverage npm version apache license

Smart Payment Buttons application, including:

  • Server-side buttons renderer
  • Client side logic

Please note: this repo is not intended as a public entry point into the smart buttons. Please see:


Running the development server

npm install
npm start

Then load http://localhost:8003/smart/buttons?clientID=alc_client1 in your browser.

Running tests

npm test


Release a new version

npm run release

Deploy the new version

npm run deploy

Activate traffic on the new version

npm run activate

Activate traffic on a specific version

npm run activate 2.0.123

Activate traffic on a specific version to a specific environment

npm run activate 2.0.123 sandbox

Activate traffic on a specific version to multiple specific environments

npm run activate 2.0.123 'local stage sandbox'

Using local paypal-checkout-components

This repo uses the button renderer from github.com/paypal/paypal-checkout-components. To pull in local changes from paypal-checkout-components to this module:

  • Clone and set up the github.com/paypal/paypal-checkout-components repo
  • Run this module with BUTTON_RENDER_DIR=/path/to/paypal-checkout-components npm start
  • Load http://localhost/smart/buttons?clientID=alc_client1 in your browser

Preflight call

This section is relevant to integrations passing data-user-id-token, for vaulted/one-click button renders.

Rendering the vaulted button can be time consuming. The Smart Buttons server allows a pre-flight call to be made. This pre-caches the button, ready to be rendered immediately when the buyer lands on your page. This should typically be done in one of the following places:

  • On a page immediately prior to displaying the Smart Buttons
  • On a single-page app prior to displaying the Smart Buttons, if the Smart Buttons are displayed after a user action
  • On the server-side prior to rendering the cart or checkout page containing the Smart Buttons

To invoke, simply make a call to the following URL:


The following URL params can be passed:

  • client-id: (required) Your PayPal client id
  • user-id-token: (required) Your customer's id token
  • merchant-id (optional) The merchant id or email of the transaction payee
  • amount: (optional) The estimated amount of the transaction
  • currency: (optional) The currency of the transaction

This request can be made as a fire-and-forget call: you do not need to wait for a response, or check the status code of the response.