Skip to content


Repository files navigation


Build Status Coverage Status npm (scoped) npm bundle size (scoped) GitHub

Payment gateway for NANO

accept-nano-client is a JavaScript package that helps you to communicate with accept-nano for receiving NANO payments easily in your client-side applications.


via NPM

npm install @accept-nano/client

yarn add @accept-nano/client

ES Modules / TypeScript

import * as acceptNano from '@accept-nano/client'


const acceptNano = require('@accept-nano/client')

Directly in Browser, as a UMD module

After the accept-nano-client script is loaded there will be a global variable called acceptNano, which you can access via window.acceptNano

    <script src=""></script>


Creating a Payment Session

To be able to initiate the payment process, you must create a new payment session.

// 1- create a new payment session
type CreateSessionParams = {
  apiHost: string // host of your Accept NANO server, without protocol
  pollInterval?: number // time interval (ms) to re-check for verification of a payment (default: 3s)
  debug?: boolean // enables debug mode and prints some useful stuff to console

const session = acceptNano.createSession({
  apiHost: '',

// 2- register event listeners to shape-up your logic based on session events.
type PaymentSessionEvents = {
  start: () => void
  end: (error: PaymentError | null, payment: AcceptNanoPayment | null) => void

session.on('start', () => {

session.on('end', (error, payment) => {
  if (error) {
    return myApp.paymentFailed({ reason: error.reason })

  return myApp.paymentSucceeded({
    amount: payment.amount,
    state: payment.state,

Presenting the Payment Overlay

After creating your session and attaching the event listeners, you can follow one of those options to proceed with the payment flow.

Option 1: Create a Payment Through Client

If you want to create and verify an accept-nano payment in your client application, you can use this option.

After the payment is created, accept-nano-client will automatically proceed to the verification step.

type CreatePaymentParams = {
  amount: string // stringified number
  currency: 'NANO' | 'USD'
  state?: string // payload to share between your client and server, will be embedded into the payment object

  amount: '1',
  currency: 'USD',
  state: '{userId:7}',

Option 2: Verify a Payment Through Client

If you create an accept-nano payment in another context (such as your application's backend), you can use this option to perform the verification in your client application.

type VerifyPaymentParams = {
  token: string // the Accept NANO payment token created in your backend application

session.verifyPayment({ token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' })


  • Please open an issue if you have a question or suggestion.
  • Don't create a PR before discussing it first.

Who is using accept-nano-client in production?

Please send a PR to list your site if accept-nano is helping you to receive NANO payments.



Cross-browser compatibility is tested with BrowserStack, thanks for supporting open source ❤️️