nodejs sdk
Switch branches/tags
Nothing to show
Clone or download
Latest commit b9cef75 Oct 17, 2018 NodeJS SDK

SDK for allowing you to manage your transactions in nodeJS


npm install paynl-sdk --save


  • Require 'paynl-sdk' in your file.
var Paynl = require('paynl-sdk');
  • Register for a account at:
  • In the admin, navigate to Manage -> Services and click the SL-code on the left.
  • From the popup use the apitoken and serviceId, and configure them in the SDK.


Some of the basic examples are listed here, for the full list of examples, please take a look at the samples directory here

All examples start with requiring paynl-sdk and setting the apitoken and serviceId.

var Paynl = require('paynl-sdk');


Basic transactions

Getting the available payment methods

This example shows how to fetch a list of the available payment methods. The method Paynl.Paymentmethods.getList() returns an observable array. For more information about observables see

    function(paymentmethod) {
        console.log( + ' ' + paymentmethod.visibleName);
.catch(error => {

Starting a transaction

This example shows the minimum required attributes to start a transaction. The full version with all supported options is located here

    //the amount in euro
    amount: 19.95,
    //we redirect the user back to this url after the payment
    returnUrl: "",
    //the ip address of the user
    ipAddress: '' 
  function (result) {
    //redirect the user to this url to complete the payment
    // the transactionId, use this to fetch the transaction later
  function (error) {

Fetching a transaction

The following example shows how to fetch a transaction.

    // some examples of what you can do with the result
    if (result.isPaid()) {
        console.log('The transaction is paid');
        // refund a part of the transaction
            amount: 0.5,
            description: '50 cents refund'
    if (result.isCanceled()) {
        console.log('Tranasaction is canceled, restock the items');
    if (result.isBeingVerified()) {
        console.log('Transaction needs to be verified first, possible fraud');
        result.decline(); //decline the transaction
        result.approve(); //approve the transaction 

Instore payments (pin)

Fetching available terminals

Before you can send a transaction, you need to know which terminal to send the transaction to.

    .forEach(function (terminal) {
    console.log( + ' ' +;
    .catch(function (error) { return console.error(error); });

Starting an instore transaction

An instore transaction is started in the same way as a normal transaction with the addition of a terminalId. After the transaction has been started, you can use the terminalStatusUrl to get the status of the transaction.

// Start transaction and send to the terminal
    amount: 0.01,
    paymentMethodId: 1927,
    //returnUrl and ipAddres make no sense for instore payments, but are mandatory
    returnUrl: "not_applicable",
    ipAddress: "",
    terminalId: "TH-0123-4567"
    //when the transaction is started, get the status
    function (transaction) { 
function getStatus(statusUrl) {
    Paynl.Instore.getTransactionStatus(statusUrl).subscribe(function (status) {
        console.log("isFinal: ", status.isFinal);
        console.log("status: ", status.status);
        console.log("txId: ", status.txId);
        console.log("terminal: ", status.terminal);
        console.log("ssai: ", status.ssai);
        console.log("isCanceled: ", status.isCanceled);
        console.log("isApproved: ", status.isApproved);
        console.log("isError: ", status.isError);
        console.log("needsSignature: ", status.needsSignature);
        console.log("amount: ", status.amount);
        console.log("approvalId: ", status.approvalId);
        console.log("cardBrandIdentifier: ", status.cardBrandIdentifier);
        console.log("cardBrandLabelName: ", status.cardBrandLabelName);
        console.log("incidentCode: ", status.incidentCode);
        console.log("incidentCodeText: ", status.incidentCodeText);
        console.log("receipt: ", status.receipt);
    }, function (error) { 
    }, function () {

Direct Debit (Incasso)

Creating a new Direct Debit

This SDK can also add direct debit transactions. Only amount, bankaccountHolder and bankaccountNumber are mandatory, the rest of the arguments are optional.

    amount: 0.01,
    bankaccountHolder: "N Name",
    bankaccountNumber: "NL00RABO0000012345678",
    // optional
    bankaccountBic: "RABONL2U",
    processDate: new Date("2018-03-01"),
    description: "Uw omschrijving",
    ipAddress: "",
    email: "",
    promotorId: 1234,
    tool: "tool",
    info: "info",
    object: "object",
    extra1: "extra1",
    extra2: "extra2",
    extra3: "extra3",
    currency: "EUR",
    exchangeUrl: "https://your-exchange.url",
}).subscribe(function (mandateId) {
    console.log("The mandateId is: " + mandateId);
}, function (error) {
    console.error("Error " + error);

Fetching a Direct Debit transaction

Fetch a DirectDebit transaction to fetch the status.

Paynl.DirectDebit.get('IO-5289-5134-1580').subscribe(function (transaction) {