Node.js Qiwi SDK: Effortless Integration for Payments


QIWI SDK for node: P2P Payments & Wallet management

🍬 Why use this lib?

  1. Full. Covers the following APIs: Wallet Personal, P2P Payments;
  2. Simple. All methods are named as in QIWI documentation and collected into subclasses. All methods have JSDoc comments. Lot of examples.
  3. Reliable. The library is written in TypeScript and covered by tests.
  4. Secure. The library has only 1 dependency (axios) and is constantly scanned by Code QL and Snyk for vulnerabilities.
  5. Compatible. Code from version 1.1.0 (18 Jan. 2020) will work on version 4.0.0 (26 May 2022) with little changes. Also qiwi-sdk provides classes to make migration from similar libs effortless.

Language: Русский | English

📦 Installation

  • Using npm
npm i qiwi-sdk
  • Using Yarn
yarn add qiwi-sdk
  • Using pnpm
pnpm add qiwi-sdk

Language: Русский | English

🛠️ Usage


From the library you can import all the APIs separately, because use cases are different.

CommonJS (default for Node JS)

const { P2p, Wallet, Detector } = require("qiwi-sdk");

TypeScript or ES Modules

import { P2p, Wallet, Detector } from "qiwi-sdk";


👉 View API Reference 👈

The table shows the currently implemented APIs.

Class (Legacy v2) is a compatible class only for those who are upgrading from version 2. The rest are advised to use the new version of the API - Class v3.

API Overview

Class (v3)Class (Legacy v2)Documentation by QIWIRecommended var name
WalletPersonal (or qiwi)
P2p- (or payments)

To see detailed documentation on a class, click on its name.


  1. Migration from version 2 to 3;
  2. Migration from version 1 to 2 (just in case);
  3. Migration from node-qiwi;
  4. Migration from @qiwi/bill-payments-node-js-sdk.


const { Wallet, P2p, Detector } = require("qiwi-sdk");

const wallet = new Wallet({
  token: process.env.QIWI_TOKEN,
  walletId: process.env.QIWI_WALLET

const p2p = new P2p({
  secretKey: process.env.QIWI_SECRET_KEY,
  publicKey: process.env.QIWI_PUBLIC_KEY

const detect = new Detector();

Environment variables

The following environment variables were used in this example. It's recommended to store all data for API access in environment variables or in another protected place, but not in the code.

QIWI_TOKENString(32 chars) - HexQiwi token got on
QIWI_WALLETString(10-16 chars) - DigitsWallet's phone number
QIWI_SECRET_KEY и QIWI_PUBLIC_KEYStringsKey pair created on


Getting info about wallet

const wallet = Wallet.create(process.env.QIWI_TOKEN);

// => { contractInfo: {...}, authInfo: {...}, userInfo: {...} }

Sending payment

const wallet = Wallet.create(process.env.QIWI_TOKEN);

// 100 RUB from RUB account to QIWI (99) `79123456789` including commission
// All above can be configured
  amount: 100,
  account: "79123456789"

Using P2P

const p2p = P2p.create(process.env.QIWI_SECRET_KEY);

    amount: {
      value: 1000,
      currency: P2p.Currency.RUB
    successUrl: ""

// => { payUrl: '' }

Using Proxy

const { SocksProxyAgent } = require("socks-proxy-agent");

const wallet = Wallet.create(process.env.QIWI_TOKEN);
wallet.agent = new SocksProxyAgent("socks://login:password@host:port");

// do work here

// Remember to dispose agent
wallet.agent = undefined;

Express integration

const p2p = P2p.create(process.env.QIWI_SECRET_KEY);
const app = express();
  p2p.notificationMiddleware({}, (req, res) => {
    // Bill body

    // { "siteId": "9hh4jb-00", "billId": "cc961e8d-d4d6-4f02-b737-2297e51fb48e", ... }

app.use((error, req, res, next) => {
  if (error instanceof P2pBillNotificationError) {
    // Somebody sent invalid notification

  return next();

Full examples

  1. 🥝 Getting info about wallet
  2. 📬 Sending payment
  3. 🛠️ Using P2P api
  4. 🔐 Getting wallet limits (using ESM)
  5. 🤖 Telegram bot with direct payments (by wallet phone number)
  6. 🖥️ Shop on Express
  7. 🌐 Using proxy

Language: Русский | English


  1. ⁉️ Do not hesitate to create Issues
  2. 🛠️ If you want to contribute to code, follow
  3. 💸 Also please donate 👉
  4. 🌟 Or give this repo a star, if you liked this lib


You can write issue, or if i am slow to answer it, you can DM me in

👅 Язык

👉 Документация на Русском 🇷🇺 👈

Language: Русский | English

Download Details:

Author: AlexXanderGrib
Source Code: 
License: MIT license

#node #nodejs #sdk #javascript #typescript 

Node.js Qiwi SDK: Effortless Integration for Payments
1.85 GEEK