Marketplace Model

In a Marketplace Model, a customer can purchase items or services from multiple affiliates in a single order. Each affiliate is responsible for their portion of the cart, including:

Invoice Generation

Affiliates generate their own invoices for their portion

Transaction Management

Capturing or cancelling their transactions independently

Refund Processing

Handling refunds for their specific items or services

Novalnet processes these as individual affiliate transactions, while the customer sees a single unified debit.

How Is the Transaction Split?

Transaction splits are defined using the marketplace.tx_split field:

SAMPLE CODE
"marketplace.tx_split": {
    "2261": "100",
    "2271": "150"
}

Key Points:

  • • Keys represent Affiliate IDs
  • • Values are amounts in cents (e.g., €1.00 and €1.50)

What if the Marketplace Contributes to the Turnover?

In cases where the marketplace also sells products/services, its share is declared in the main transaction.amount:

SAMPLE CODE
"transaction.amount": {
    "amount": "250"
},
"marketplace.tx_split": {
    "2261": "100",
    "2271": "150"
}

If the marketplace does not contribute:

SAMPLE CODE
"transaction.amount": {
    "amount": "0"
}

Note: Novalnet automatically aggregates transaction.amount and all values in marketplace.tx_split to process the total debit.

Scenariotransaction.amountAffiliate 2261Affiliate 2271Total Debit
With Marketplace Contribution€2.50€1.00€1.50€5.00
Without Marketplace Contribution€0.00€1.00€1.50€2.50

Commission Sharing Between Marketplace and Affiliates

Commission can be configured either as a percentage or a fixed amount.

1
Percentage-Based Commission (Default)

• By default, affiliates receive 100% of their turnover.

• To deduct a commission, use the marketplace.commission_split parameter.

Static Setup

  • • At Project Level (applies to all affiliates in the project)
  • • Marketplace/Affiliate → Project & Affiliate Commission Configuration → Project Commission
  • • At Affiliate Level (individual settings)
  • • Marketplace/Affiliate → Project & Affiliate Commission Configuration → Affiliate Commission

Dynamic Setup

Configure commission rates programmatically using API parameters

SAMPLE CODE
"marketplace.commission_split": {
    "2261": { "percentage": "98" },
    "2271": { "percentage": "97" }
}

• The marketplace earns 2% and 3% commission respectively.

Note:

  • • Percentages can include decimals
  • • To reverse the model (marketplace takes 100% and pays affiliates), set commission to 0

2
Fixed Commission (Amount-Based)

This model lets the marketplace receive a fixed commission amount.

  • Used when marketplace deducts or grants a specific amount per affiliate
  • Negative values mean deductions; positive values mean bonuses

Dynamic Setup Example

SAMPLE CODE
"marketplace.commission_split": {
    "2261": { "amount": "-2" },
    "2271": { "amount": "-4" }
}
  • • Negative values indicate a deduction from affiliate payout.
  • • Positive values can be used to credit affiliates.

Setup Locations in Admin Portal:

  • Project-wide: Marketplace/Affiliate → Project Commission
  • Individual affiliate: Marketplace/Affiliate → Affiliate Commission

• Configured at Project Level or Affiliate Level using same paths as above.

Note: Fixed values also support decimal entries.

Cost Sharing Between Marketplace and Affiliates

Payment gateway costs (e.g., transaction fee, fraud module fee) can be distributed using cost commission settings:

  • Default: Marketplace bears all costs
  • Customizable at project or affiliate level
  • Cost share is defined as a percentage (0% to 100%)

Run a Sample Request

The following sample includes only the essential parameters required for demonstration and explanation purposes. For a complete list of all available parameters, along with their descriptions, header information, and result details, please refer to the links below:

  • For Hosted Payment Page integration, see the full parameter reference >>here<<.
  • For Direct API integration, see the full parameter reference >>here<<.

Executing follow up payments using tokenization (without customer interaction)

To use the token based on your business model, the token has to be created (as detailed in the step Creating Token). With the secure token already created, it is not necessary to transmit the payment details instead the token has to be passed in transaction.payment_data.token to complete the payment.

Tokenization Followup
<?php

    // Need to enter your payment access key value here
    $payment_access_key = '###YOUR_PAYMENT_ACCESS_KEY###';

    // Now, have to encode the $payment_access_key value with the base64 encode
    $encoded_data        = base64_encode($payment_access_key);

    // Action Endpoint 
    $endpoint           = 'https://payport.novalnet.de/v2/payment';

    // Build the Headers array
    $headers = [

      // The Content-Type should be "application/json"
        'Content-Type:application/json',
        
        // The charset should be "utf-8"
        'Charset:utf-8', 
        
        // Optional
        'Accept:application/json', 
        
        // The formed authenticate value (case-sensitive)
        'X-NN-Access-Key:' . $encoded_data
    ];

    $data = [];

    // Build Merchant Data
    $data['merchant'] = [
      // Your API signature value
      'signature' => '###YOUR_API_SIGNATURE###', 
            
      // Your corresponding tariff ID
      'tariff'    => '###YOUR_TARIFF_ID###'
    ];

    // Build Customer Data
    $data['customer'] = [

        // Shopper's first name
        'first_name'  => 'Norbert',
        
        // Shopper's last name
        'last_name'   => 'Maier', 
        
        // Shopper's email
        'email'       => '###YOUR_MAIL###', 

        // Shopper's Ip address
        'customer_ip' => '###CUSTOMER_IP###',
        
        // Shopper's customer number from the shop
        'customer_no' => '###CUSTOMER_NUMBER###',
        
        // Shopper's Telephone number
        'tel'         => '+49 089 123456',
        
        // Shopper's Mobile number 
        'mobile'      => '+49 174 7781423',
        
        // Shopper's birthdate value YYYY-MM-DD - Decomment it based on your usage
        // 'birth_date'  => '1992-06-10',
        
        // Shopper's gender - Decomment it based on your usage
        // 'gender'      => 'u',

        // Shopper's company vat ID value - Decomment it based on your usage
        // 'vat_id'      => 'DE123456',
        
        // Shopper's company regestration number - Decomment it based on your usage
        // 'reg_no'      => 'HRB1234',
        
        // Shopper's company tax ID value - Decomment it based on your usage
        // 'tax_id'      => '123/123/123',
        
        // Shopper's session value - Decomment it based on your usage
        // 'session'     => 'fedgrgst5653653hdgfsvgdsf622627e',
        
        // Shopper's fax number - Decomment it based on your usage
        // 'fax'         => '+49 89 654321',

        // Shopper's billing address
        'billing'     => [
        
        // House number
        'house_no'     => '9',
        
        // Street
        'street'       => 'Hauptstr',
        
        // City
        'city'         => 'Kaiserslautern',
        
        // zip
        'zip'          => '66862',
        
        // Country's ISO code
        'country_code' => 'DE',
        
        // Name of the company - Decomment it based on your usage
            'company'   => 'ABC GmbH'
        ],
        
        /* 
        // Optional child object - Decomment it based on your usage
        'shipping' => [
        
        // First name
            'first_name'    => 'Norbert',
            
            // Last name
            'last_name'     => 'Maier',
            
            // Email
            'email'         => 'test@novalnet.de',
        
            // Street
        'street'        => 'Hauptstr',
        
        // House number
        'house_no'      => '9',
        
        // City
        'city'          => 'Kaiserslautern',
        
        // zip
        'zip'           => '66862',
        
        // Country's ISO code
        'country_code'  => 'DE',
        
        // Name of the company
            'company'       => 'A.B.C. Gerüstbau GmbH',
            
            // Telephone number
            'tel'           => '+49 089 123456',

            // Mobile number
            'mobile'        => '+49 174 7781423'
        ]
        */
    ];

    // Build Transaction Data
    $data['transaction'] = [

        // The Payment type of the transaction
        'payment_type'     => '###PAYMENT_TYPE###',
        
        // The transaction Amount in smaller currency unit
        'amount'           => '###TRANSACTION_AMOUNT###',
        
        // The transaction currency's ISO code
        'currency'         => '###TRANSACTION_CURRENCY###',
        
        // The mode of the transaction
        'test_mode'        => '###TEST_MODE###',
        
        // The mode of the transaction
        'order_no'         => '###TRANSACTION_ORDER_NUMBER###',
        
        // The Hook URL value for this particular transaction
        'hook_url'         => '###YOUR_HOOK_URL###',
        
        // Build Payment Data
        'payment_data'     => [
        
        // The created payment token
        'token' => '###PAYMENT_TOKEN###'   
        ]
    ];

    // Instalment data
    //$data['instalment'] = [

      // The interval between each cycle
      //'interval' => '1m',

      // Total number of cycles
      //'cycles' => '3'
    //];

    /* 
    // Subscription Data, used for processing Novalnet`s subscription - Optional object - Decomment it based on your usage
    $data['subscription'] = [

        // The interval between each cycle
        'interval'       => '1m',

        // Subscription trial interval if applicable
        'trial_interval' => '3m',

        // Subscription trial interval amount if applicable
        'trial_amount'   => '150'
    ];
    */

    /* 
    // Marketplace data, used for the affiliate`s marketplace model - Optional object - Decomment it based on your usage
    $data['marketplace'] = [

      // To submit amount for several affiliates to be booked
      'tx_split' => [
        '2261' => '20',
        '2271' => '30'
      ],  
    ];
    */

    /*
    // Affiliate Data, used for the affiliate`s revenue split model - Optional object - Decomment it based on your usage
    $data['affiliate'] = [
      
      // To submit shares for several affiliates for the same transaction
      'subvendors'=> [
        '2261' => '20',
        '2271' => '30'
      ]
    ];
    */

    // Custom Data - Optional object
    $data['custom'] = [
      
      // Shopper's selected language in shop
      "lang" => "EN",
      
      // Custom parameter's key - Optional object - Decomment it based on your usage
      // 'input1'    => 'your internal reference parameter name',
      
      // Custom parameter's value - Optional object - Decomment it based on your usage
      // 'inputval1' => 'your internal reference parameter value'
    ];

    // Convert the array to JSON string
    $json_data = json_encode($data);

    // Handle Response
    $response = send_request($json_data, $endpoint, $headers);

    function send_request($data, $url, $headers) {

        // Initiate cURL
        $curl = curl_init();
        
        // Set the url
        curl_setopt($curl, CURLOPT_URL, $url);
        
        // Set the result output to be a string
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        
        // Set the POST value to true (mandatory)
        curl_setopt($curl, CURLOPT_POST, true);
        
        // Set the post fields
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        
        // Set the headers
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

        // Execute cURL
        $result = curl_exec($curl);

        // Handle cURL error
        if (curl_errno($curl)) {
            echo 'Request Error:' . curl_error($curl);
            return $result;
        }
        
        // Close cURL
        curl_close($curl);  
        
        // Decode the JSON string
        $result = json_decode($result);

        return $result;
    }
    ?>
curl --location --request POST 'https://payport.novalnet.de/v2/payment' -H 'Content-Type: application/json' -H 'Charset:utf-8' -H 'Accept: application/json' -H 'X-NN-Access-Key: ###YOUR_ENCODED_PAYMENT_ACCESS_KEY###' -d '{"merchant":{"signature":"###YOUR_API_SIGNATURE###","tariff":"###YOUR_TARIFF_ID###"},"customer":{"first_name":"Norbert","last_name":"Maier","email":"###YOUR_MAIL###","customer_ip":"###CUSTOMER_IP###","customer_no":"###CUSTOMER_NUMBER###","tel":"+49 089 123456","mobile":"+49 174 7781423","billing":{"house_no":"9","street":"Hauptstr","city":"Kaiserslautern","zip":"66862","country_code":"DE", "company": "ABC GmbH"}},"transaction":{"payment_type":"###PAYMENT_TYPE###","amount":"###TRANSACTION_AMOUNT###","currency":"###TRANSACTION_CURRENCY###","test_mode":"###TEST_MODE###","order_no":"###TRANSACTION_ORDER_NUMBER###","hook_url":"###YOUR_HOOK_URL###","payment_data":{"token":"###PAYMENT_TOKEN###"}},"custom":{"lang":"EN"}}';
#!/usr/bin/node

    const https = require('https');
    // data sent in the body of the request
    const postData = JSON.stringify({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
        "token": "###PAYMENT_TOKEN###"
        }
      },
      "custom": {
        "lang": "EN"
      }
    });

    const options = {
      hostname: 'payport.novalnet.de',
      port: 443,
      path: '/v2/payment',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(postData),
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
      },
    };

    const req = https.request(options, (res) => {
      console.log('statusCode:', res.statusCode);
      // console.log('headers:', res.headers);

      res.on('data', (d) => {
        process.stdout.write(d);
      });
    });

    req.on('error', (e) => {
      console.error('ERROR: ',e);
    });

    // Write data to request body
    req.write(postData);
    req.end();
#!/usr/bin/python3

    import http.client
    import json

    CONN = http.client.HTTPSConnection("payport.novalnet.de")
    PAYLOAD = json.dumps({
        "merchant": {
            "signature": "###YOUR_API_SIGNATURE###",
            "tariff": "###YOUR_TARIFF_ID###"
        },
        "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
        },
        "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
          "token": "###PAYMENT_TOKEN###"
        }
        },
        "custom": {
            "lang": "EN"
        }
    })
    HEADERS = {
        'Content-Type': 'application/json',
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
    }
    CONN.request("POST", "/v2/payment", PAYLOAD, HEADERS)
    RES = CONN.getresponse()
    DATA = RES.read()
    print(DATA.decode("utf-8"))
#!/usr/lib/ruby

    require "uri"
    require "json"
    require "net/http"

    url = URI("https://payport.novalnet.de/v2/payment")

    https = Net::HTTP.new(url.host, url.port)
    https.use_ssl = true

    request = Net::HTTP::Post.new(url)
    request["Content-Type"] = "application/json"
    request["Accept"] = "application/json"
    request["Charset"] = "utf-8"
    request["X-NN-Access-Key"] = "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###"
    request.body = JSON.dump({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },
      "custom": {
        "lang": "EN"
      }
    })

    response = https.request(request)
    puts response.read_body
package main

    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )

    func main() {

      url := "https://payport.novalnet.de/v2/payment"
      method := "POST"

      payload := strings.NewReader(`{"merchant":{"signature":"###YOUR_API_SIGNATURE###", "tariff" : "###YOUR_TARIFF_ID###"},"customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },"custom":{"lang":"EN"}}`)

      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)

      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Content-Type", "application/json")
      req.Header.Add("Accept", "application/json")
      req.Header.Add("Charset", "utf-8")
      req.Header.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")

      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()

      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
/* List of required libraries (see also the import statements below): 
    - commons-logging-1.2.jar    
    - httpasyncclient-4.1.5.jar  
    - httpclient-4.3.3.jar  
    - httpcore-4.4.16.jar   
    - httpcore-nio-4.4.16.jar  
    - httpmime-4.5.14.jar      
    - json-20230227.jar  
    - unirest-java-3.9.00.jar
    */
    import java.io.*;

    import org.json.JSONArray;
    import org.apache.http.auth.*;
    import org.apache.http.nio.conn.*; 
    import org.apache.http.concurrent.*;
    import org.apache.http.nio.reactor.*;
    import org.apache.commons.logging.*;
    import org.apache.http.entity.mime.content.*; 
    import kong.unirest.*;


    public class TokenizationRequest {
      public static void main(String []args) throws Exception{
        Unirest.config().connectTimeout(1000).socketTimeout(2000);

        HttpResponse<String> response = Unirest.post("https://payport.novalnet.de/v2/payment")
          .header("Content-Type", "application/json")
          .header("Charset", "utf-8")
          .header("Accept", "application/json")
          .header("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")
          .body("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"custom\":{\"lang\":\"EN\"}}")
          .asString();
        
        System.out.println(response.getBody());
      }
    }
using System;
    using System.Net.Http;

    namespace TokenizationRequest
    {
      public class TokenizationRequest {

        public string check_Tokenization_request() {

          var client = new HttpClient();
          var request = new HttpRequestMessage(HttpMethod.Post, "https://payport.novalnet.de/v2/payment");

          request.Headers.Add("Charset", "utf-8");
          request.Headers.Add("Accept", "application/json");
          request.Headers.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###");
          var content = new StringContent("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"custom\":{\"lang\":\"EN\"}}", null, "application/json");

          request.Content = content;
          var response = client.SendAsync(request).Result;
          response.EnsureSuccessStatusCode();
          var responseText = response.Content.ReadAsStringAsync().Result;
          Console.WriteLine(responseText);
          return responseText;
        }
        public static void Main() {
          var testRequest = new TokenizationRequest();
          testRequest.check_Tokenization_request(); 
        }

      }
    }
Tokenization Followup
<?php

    // Need to enter your payment access key value here
    $payment_access_key = '###YOUR_PAYMENT_ACCESS_KEY###';

    // Now, have to encode the $payment_access_key value with the base64 encode
    $encoded_data        = base64_encode($payment_access_key);

    // Action Endpoint 
    $endpoint           = 'https://payport.novalnet.de/v2/payment';

    // Build the Headers array
    $headers = [

      // The Content-Type should be "application/json"
        'Content-Type:application/json',
        
        // The charset should be "utf-8"
        'Charset:utf-8', 
        
        // Optional
        'Accept:application/json', 
        
        // The formed authenticate value (case-sensitive)
        'X-NN-Access-Key:' . $encoded_data
    ];

    $data = [];

    // Build Merchant Data
    $data['merchant'] = [

      // Your API signature value
        'signature' => '###YOUR_API_SIGNATURE###', 
        
        // Your corresponding tariff ID
        'tariff'    => '###YOUR_TARIFF_ID###'
    ];

    // Build Customer Data
    $data['customer'] = [

        // Shopper's first name
        'first_name'  => 'Norbert',
        
        // Shopper's last name
        'last_name'   => 'Maier', 
        
        // Shopper's email
        'email'       => '###YOUR_MAIL###', 

        // Shopper's Ip address
        'customer_ip' => '###CUSTOMER_IP###',
        
        // Shopper's customer number from the shop
        'customer_no' => '###CUSTOMER_NUMBER###',
        
        // Shopper's Telephone number
        'tel'         => '+49 089 123456',
        
        // Shopper's Mobile number 
        'mobile'      => '+49 174 7781423',
        
        // Shopper's birthdate value YYYY-MM-DD - Decomment it based on your usage
        // 'birth_date'  => '1992-06-10',
        
        // Shopper's gender - Decomment it based on your usage
        // 'gender'      => 'u',

        // Shopper's company vat ID value - Decomment it based on your usage
        // 'vat_id'      => 'DE123456',
        
        // Shopper's company regestration number - Decomment it based on your usage
        // 'reg_no'      => 'HRB1234',
        
        // Shopper's company tax ID value - Decomment it based on your usage
        // 'tax_id'      => '123/123/123',
        
        // Shopper's session value - Decomment it based on your usage
        // 'session'     => 'fedgrgst5653653hdgfsvgdsf622627e',
        
        // Shopper's fax number - Decomment it based on your usage
        // 'fax'         => '+49 89 654321',

        // Shopper's billing address
        'billing'     => [
        
        // House number
        'house_no'     => '9',
        
        // Street
        'street'       => 'Hauptstr',
        
        // City
        'city'         => 'Kaiserslautern',
        
        // zip
        'zip'          => '66862',
        
        // Country's ISO code
        'country_code' => 'DE',
        
        // Name of the company - Decomment it based on your usage
            'company'   => 'ABC GmbH'
        ],
        
        /* 
        // Optional child object - Decomment it based on your usage
        'shipping' => [
        
        // First name
            'first_name'    => 'Norbert',
            
            // Last name
            'last_name'     => 'Maier',
            
            // Email
            'email'         => 'test@novalnet.de',
        
            // Street
        'street'        => 'Hauptstr',
        
        // House number
        'house_no'      => '9',
        
        // City
        'city'          => 'Kaiserslautern',
        
        // zip
        'zip'           => '66862',
        
        // Country's ISO code
        'country_code'  => 'DE',
        
        // Name of the company
            'company'       => 'A.B.C. Gerüstbau GmbH',
            
            // Telephone number
            'tel'           => '+49 089 123456',

            // Mobile number
            'mobile'        => '+49 174 7781423'
        ]
        */
    ];

    // Build Transaction Data
    $data['transaction'] = [

        // The Payment type of the transaction
        'payment_type'     => '###PAYMENT_TYPE###',
        
        // The transaction Amount in smaller currency unit
        'amount'           => '###TRANSACTION_AMOUNT###',
        
        // The transaction currency's ISO code
        'currency'         => '###TRANSACTION_CURRENCY###',
        
        // The mode of the transaction
        'test_mode'        => '###TEST_MODE###',
        
        // The mode of the transaction
        'order_no'         => '###TRANSACTION_ORDER_NUMBER###',
        
        // The date on which the purchase is initiated
        'order_date'       => '###TRANSACTION_ORDER_DATE###',
        
        // The amount in which the purchase is initiated
        'order_amount'     => '###TRANSACTION_ORDER_AMOUNT###',
        
        // The order reference of the initial purchase
        'order_reference'  => '###TRANSACTION_ORDER_REFERENCE###',
        
        // The Hook URL value for this particular transaction
        'hook_url'         => '###YOUR_HOOK_URL###',
        
        // Build Payment Data
        'payment_data'     => [
        
        // The created payment token
        'token' => '###PAYMENT_TOKEN###'   
        ]
    ];

    // Instalment data
    //$data['instalment'] = [

      // The interval between each cycle
      //'interval' => '1m',

      // Total number of cycles
      //'cycles' => '3'
    //];

    /* 
    // Subscription Data, used for processing Novalnet`s subscription - Optional object - Decomment it based on your usage
    $data['subscription'] = [

        // The interval between each cycle
        'interval'       => '1m',

        // Subscription trial interval if applicable
        'trial_interval' => '3m',

        // Subscription trial interval amount if applicable
        'trial_amount'   => '150'
    ];
    */

    /* 
    // Marketplace data, used for the affiliate`s marketplace model - Optional object - Decomment it based on your usage
    $data['marketplace'] = [

      // To submit amount for several affiliates to be booked
      'tx_split' => [
        '2261' => '20',
        '2271' => '30'
      ],  
    ];
    */

    /*
    // Affiliate Data, used for the affiliate`s revenue split model - Optional object - Decomment it based on your usage
    $data['affiliate'] = [
      
      // To submit shares for several affiliates for the same transaction
      'subvendors'=> [
        '2261' => '20',
        '2271' => '30'
      ]
    ];
    */

    // Custom Data - Optional object
    $data['custom'] = [
      
      // Shopper's selected language in shop
      "lang" => "EN",
      
      // Custom parameter's key - Optional object - Decomment it based on your usage
      // 'input1'    => 'your internal reference parameter name',
      
      // Custom parameter's value - Optional object - Decomment it based on your usage
      // 'inputval1' => 'your internal reference parameter value'
    ];

    // Convert the array to JSON string
    $json_data = json_encode($data);

    // Handle Response
    $response = send_request($json_data, $endpoint, $headers);

    function send_request($data, $url, $headers) {

        // Initiate cURL
        $curl = curl_init();
        
        // Set the url
        curl_setopt($curl, CURLOPT_URL, $url);
        
        // Set the result output to be a string
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        
        // Set the POST value to true (mandatory)
        curl_setopt($curl, CURLOPT_POST, true);
        
        // Set the post fields
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        
        // Set the headers
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

        // Execute cURL
        $result = curl_exec($curl);

        // Handle cURL error
        if (curl_errno($curl)) {
            echo 'Request Error:' . curl_error($curl);
            return $result;
        }
        
        // Close cURL
        curl_close($curl);  
        
        // Decode the JSON string
        $result = json_decode($result);

        return $result;
    }
    ?>
curl --location --request POST 'https://payport.novalnet.de/v2/payment' -H 'Content-Type: application/json' -H 'Charset:utf-8' -H 'Accept: application/json' -H 'X-NN-Access-Key: ###YOUR_ENCODED_PAYMENT_ACCESS_KEY###' -d '{"merchant":{"signature":"###YOUR_API_SIGNATURE###","tariff":"###YOUR_TARIFF_ID###"},"customer":{"first_name":"Norbert","last_name":"Maier","email":"###YOUR_MAIL###","customer_ip":"###CUSTOMER_IP###","customer_no":"###CUSTOMER_NUMBER###","tel":"+49 089 123456","mobile":"+49 174 7781423","billing":{"house_no":"9","street":"Hauptstr","city":"Kaiserslautern","zip":"66862","country_code":"DE", "company": "ABC GmbH"}},"transaction":{"payment_type":"###PAYMENT_TYPE###","amount":"###TRANSACTION_AMOUNT###","currency":"###TRANSACTION_CURRENCY###","test_mode":"###TEST_MODE###","order_no":"###TRANSACTION_ORDER_NUMBER###","order_date":"###TRANSACTION_ORDER_DATE###","order_amount":"###TRANSACTION_ORDER_AMOUNT###","order_reference":"###TRANSACTION_ORDER_REFERENCE###","hook_url":"###YOUR_HOOK_URL###","payment_data":{"token":"###PAYMENT_TOKEN###"}},"custom":{"lang":"EN"}}';
#!/usr/bin/node
    // refund request script using the standard https library

    const https = require('https');
    // data sent in the body of the request
    const postData = JSON.stringify({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "order_date":"###TRANSACTION_ORDER_DATE###",
        "order_amount":"###TRANSACTION_ORDER_AMOUNT###",
        "order_reference":"###TRANSACTION_ORDER_REFERENCE###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
        "token": "###PAYMENT_TOKEN###"
        }
      },
      "custom": {
        "lang": "EN"
      }
    });

    const options = {
      hostname: 'payport.novalnet.de',
      port: 443,
      path: '/v2/payment',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(postData),
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
      },
    };

    const req = https.request(options, (res) => {
      console.log('statusCode:', res.statusCode);
      // console.log('headers:', res.headers);

      res.on('data', (d) => {
        process.stdout.write(d);
      });
    });

    req.on('error', (e) => {
      console.error('ERROR: ',e);
    });

    // Write data to request body
    req.write(postData);
    req.end();
#!/usr/bin/python3

    import http.client
    import json

    CONN = http.client.HTTPSConnection("payport.novalnet.de")
    PAYLOAD = json.dumps({
        "merchant": {
            "signature": "###YOUR_API_SIGNATURE###",
            "tariff": "###YOUR_TARIFF_ID###"
        },
        "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
        },
        "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "order_date":"###TRANSACTION_ORDER_DATE###",
        "order_amount":"###TRANSACTION_ORDER_AMOUNT###",
        "order_reference":"###TRANSACTION_ORDER_REFERENCE###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
          "token": "###PAYMENT_TOKEN###"
        }
        },
        "custom": {
            "lang": "EN"
        }
    })
    HEADERS = {
        'Content-Type': 'application/json',
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
    }
    CONN.request("POST", "/v2/payment", PAYLOAD, HEADERS)
    RES = CONN.getresponse()
    DATA = RES.read()
    print(DATA.decode("utf-8"))
#!/usr/lib/ruby

    require "uri"
    require "json"
    require "net/http"

    url = URI("https://payport.novalnet.de/v2/payment")

    https = Net::HTTP.new(url.host, url.port)
    https.use_ssl = true

    request = Net::HTTP::Post.new(url)
    request["Content-Type"] = "application/json"
    request["Accept"] = "application/json"
    request["Charset"] = "utf-8"
    request["X-NN-Access-Key"] = "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###"
    request.body = JSON.dump({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
      "order_date":"###TRANSACTION_ORDER_DATE###",
      "order_amount":"###TRANSACTION_ORDER_AMOUNT###",
      "order_reference":"###TRANSACTION_ORDER_REFERENCE###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },
      "custom": {
        "lang": "EN"
      }
    })

    response = https.request(request)
    puts response.read_body
package main

    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )

    func main() {

      url := "https://payport.novalnet.de/v2/payment"
      method := "POST"

      payload := strings.NewReader(`{"merchant":{"signature":"###YOUR_API_SIGNATURE###", "tariff" : "###YOUR_TARIFF_ID###"},"customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "order_date":"###TRANSACTION_ORDER_DATE###",
        "order_amount":"###TRANSACTION_ORDER_AMOUNT###",
        "order_reference":"###TRANSACTION_ORDER_REFERENCE###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },"custom":{"lang":"EN"}}`)

      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)

      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Content-Type", "application/json")
      req.Header.Add("Accept", "application/json")
      req.Header.Add("Charset", "utf-8")
      req.Header.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")

      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()

      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
/* List of required libraries (see also the import statements below): 
    - commons-logging-1.2.jar    
    - httpasyncclient-4.1.5.jar  
    - httpclient-4.3.3.jar  
    - httpcore-4.4.16.jar   
    - httpcore-nio-4.4.16.jar  
    - httpmime-4.5.14.jar      
    - json-20230227.jar  
    - unirest-java-3.9.00.jar
    */
    import java.io.*;

    import org.json.JSONArray;
    import org.apache.http.auth.*;
    import org.apache.http.nio.conn.*; 
    import org.apache.http.concurrent.*;
    import org.apache.http.nio.reactor.*;
    import org.apache.commons.logging.*;
    import org.apache.http.entity.mime.content.*; 
    import kong.unirest.*;


    public class TokenizationCreate {
      public static void main(String []args) throws Exception{
        Unirest.config().connectTimeout(1000).socketTimeout(2000);

        HttpResponse<String> response = Unirest.post("https://payport.novalnet.de/v2/payment")
          .header("Content-Type", "application/json")
          .header("Charset", "utf-8")
          .header("Accept", "application/json")
          .header("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")
          .body("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\","order_date":"###TRANSACTION_ORDER_DATE###","order_amount":"###TRANSACTION_ORDER_AMOUNT###","order_reference":"###TRANSACTION_ORDER_REFERENCE###",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"custom\":{\"lang\":\"EN\"}}")
          .asString();
        
        System.out.println(response.getBody());
      }
    }
using System;
    using System.Net.Http;

    namespace TokenizationCreateRequest
    {
      public class TokenizationCreate {

        public string check_Tokenization_create_request() {

          var client = new HttpClient();
          var request = new HttpRequestMessage(HttpMethod.Post, "https://payport.novalnet.de/v2/payment");

          request.Headers.Add("Charset", "utf-8");
          request.Headers.Add("Accept", "application/json");
          request.Headers.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###");
          var content = new StringContent("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\","order_date":"###TRANSACTION_ORDER_DATE###","order_amount":"###TRANSACTION_ORDER_AMOUNT###","order_reference":"###TRANSACTION_ORDER_REFERENCE###",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"custom\":{\"lang\":\"EN\"}}", null, "application/json");

          request.Content = content;
          var response = client.SendAsync(request).Result;
          response.EnsureSuccessStatusCode();
          var responseText = response.Content.ReadAsStringAsync().Result;
          Console.WriteLine(responseText);
          return responseText;
        }
        public static void Main() {
          var testRequest = new TokenizationCreate();
          testRequest.check_Tokenization_create_request(); 
        }

      }
    }
Tokenization Followup
<?php

    // Need to enter your payment access key value here
    $payment_access_key = '###YOUR_PAYMENT_ACCESS_KEY###';

    // Now, have to encode the $payment_access_key value with the base64 encode
    $encoded_data        = base64_encode($payment_access_key);

    // Action Endpoint 
    $endpoint           = 'https://payport.novalnet.de/v2/payment';

    // Build the Headers array
    $headers = [

      // The Content-Type should be "application/json"
        'Content-Type:application/json',
        
        // The charset should be "utf-8"
        'Charset:utf-8', 
        
        // Optional
        'Accept:application/json', 
        
        // The formed authenticate value (case-sensitive)
        'X-NN-Access-Key:' . $encoded_data
    ];

    $data = [];

    // Build Merchant Data
    $data['merchant'] = [

      // Your API signature value
        'signature' => '###YOUR_API_SIGNATURE###', 
        
        // Your corresponding tariff ID
        'tariff'    => '###YOUR_TARIFF_ID###'
    ];

    // Build Customer Data
    $data['customer'] = [

        // Shopper's first name
        'first_name'  => 'Norbert',
        
        // Shopper's last name
        'last_name'   => 'Maier', 
        
        // Shopper's email
        'email'       => '###YOUR_MAIL###', 

        // Shopper's Ip address
        'customer_ip' => '###CUSTOMER_IP###',
        
        // Shopper's customer number from the shop
        'customer_no' => '###CUSTOMER_NUMBER###',
        
        // Shopper's Telephone number
        'tel'         => '+49 089 123456',
        
        // Shopper's Mobile number 
        'mobile'      => '+49 174 7781423',
        
        // Shopper's birthdate value YYYY-MM-DD - Decomment it based on your usage
        // 'birth_date'  => '1992-06-10',
        
        // Shopper's gender - Decomment it based on your usage
        // 'gender'      => 'u',

        // Shopper's company vat ID value - Decomment it based on your usage
        // 'vat_id'      => 'DE123456',
        
        // Shopper's company regestration number - Decomment it based on your usage
        // 'reg_no'      => 'HRB1234',
        
        // Shopper's company tax ID value - Decomment it based on your usage
        // 'tax_id'      => '123/123/123',
        
        // Shopper's session value - Decomment it based on your usage
        // 'session'     => 'fedgrgst5653653hdgfsvgdsf622627e',
        
        // Shopper's fax number - Decomment it based on your usage
        // 'fax'         => '+49 89 654321',

        // Shopper's billing address
        'billing'     => [
        
        // House number
        'house_no'     => '9',
        
        // Street
        'street'       => 'Hauptstr',
        
        // City
        'city'         => 'Kaiserslautern',
        
        // zip
        'zip'          => '66862',
        
        // Country's ISO code
        'country_code' => 'DE',
        
        // Name of the company - Decomment it based on your usage
            'company'   => 'ABC GmbH'
        ],
        
        /* 
        // Optional child object - Decomment it based on your usage
        'shipping' => [
        
        // First name
            'first_name'    => 'Norbert',
            
            // Last name
            'last_name'     => 'Maier',
            
            // Email
            'email'         => 'test@novalnet.de',
        
            // Street
        'street'        => 'Hauptstr',
        
        // House number
        'house_no'      => '9',
        
        // City
        'city'          => 'Kaiserslautern',
        
        // zip
        'zip'           => '66862',
        
        // Country's ISO code
        'country_code'  => 'DE',
        
        // Name of the company
            'company'       => 'A.B.C. Gerüstbau GmbH',
            
            // Telephone number
            'tel'           => '+49 089 123456',

            // Mobile number
            'mobile'        => '+49 174 7781423'
        ]
        */
    ];

    // Build Transaction Data
    $data['transaction'] = [

        // The Payment type of the transaction
        'payment_type'     => '###PAYMENT_TYPE###',
        
        // The transaction Amount in smaller currency unit
        'amount'           => '30000',
        
        // The transaction currency's ISO code
        'currency'         => '###TRANSACTION_CURRENCY###',
        
        // The mode of the transaction
        'test_mode'        => '###TEST_MODE###',
        
        // The mode of the transaction
        'order_no'         => '###TRANSACTION_ORDER_NUMBER###',
        
        // The Hook URL value for this particular transaction
        'hook_url'         => '###YOUR_HOOK_URL###',
        
        // Build Payment Data
        'payment_data'     => [
        
        // The created payment token
        'token' => '###PAYMENT_TOKEN###'   
        ]
    ];

    // Instalment data
    $data['instalment'] = [

      // The interval between each cycle
      'interval' => '1m',

      // Total number of cycles
      'cycles' => '3'
    ];

    /* 
    // Subscription Data, used for processing Novalnet`s subscription - Optional object - Decomment it based on your usage
    $data['subscription'] = [

        // The interval between each cycle
        'interval'       => '1m',

        // Subscription trial interval if applicable
        'trial_interval' => '3m',

        // Subscription trial interval amount if applicable
        'trial_amount'   => '150'
    ];
    */

    /* 
    // Marketplace data, used for the affiliate`s marketplace model - Optional object - Decomment it based on your usage
    $data['marketplace'] = [

      // To submit amount for several affiliates to be booked
      'tx_split' => [
        '2261' => '20',
        '2271' => '30'
      ],  
    ];
    */

    /*
    // Affiliate Data, used for the affiliate`s revenue split model - Optional object - Decomment it based on your usage
    $data['affiliate'] = [
      
      // To submit shares for several affiliates for the same transaction
      'subvendors'=> [
        '2261' => '20',
        '2271' => '30'
      ]
    ];
    */

    // Custom Data - Optional object
    $data['custom'] = [
      
      // Shopper's selected language in shop
      "lang" => "EN",
      
      // Custom parameter's key - Optional object - Decomment it based on your usage
      // 'input1'    => 'your internal reference parameter name',
      
      // Custom parameter's value - Optional object - Decomment it based on your usage
      // 'inputval1' => 'your internal reference parameter value'
    ];

    // Convert the array to JSON string
    $json_data = json_encode($data);

    // Handle Response
    $response = send_request($json_data, $endpoint, $headers);

    function send_request($data, $url, $headers) {

        // Initiate cURL
        $curl = curl_init();
        
        // Set the url
        curl_setopt($curl, CURLOPT_URL, $url);
        
        // Set the result output to be a string
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        
        // Set the POST value to true (mandatory)
        curl_setopt($curl, CURLOPT_POST, true);
        
        // Set the post fields
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        
        // Set the headers
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

        // Execute cURL
        $result = curl_exec($curl);

        // Handle cURL error
        if (curl_errno($curl)) {
            echo 'Request Error:' . curl_error($curl);
            return $result;
        }
        
        // Close cURL
        curl_close($curl);  
        
        // Decode the JSON string
        $result = json_decode($result);

        return $result;
    }
    ?>
curl --location --request POST 'https://payport.novalnet.de/v2/payment' -H 'Content-Type: application/json' -H 'Charset:utf-8' -H 'Accept: application/json' -H 'X-NN-Access-Key: ###YOUR_ENCODED_PAYMENT_ACCESS_KEY###' -d '{"merchant":{"signature":"###YOUR_API_SIGNATURE###","tariff":"###YOUR_TARIFF_ID###"},"customer":{"first_name":"Norbert","last_name":"Maier","email":"###YOUR_MAIL###","customer_ip":"###CUSTOMER_IP###","customer_no":"###CUSTOMER_NUMBER###","tel":"+49 089 123456","mobile":"+49 174 7781423","billing":{"house_no":"9","street":"Hauptstr","city":"Kaiserslautern","zip":"66862","country_code":"DE", "company": "ABC GmbH"}},"transaction":{"payment_type":"###PAYMENT_TYPE###","amount":"30000","currency":"###TRANSACTION_CURRENCY###","test_mode":"###TEST_MODE###","order_no":"###TRANSACTION_ORDER_NUMBER###","hook_url":"###YOUR_HOOK_URL###","payment_data":{"token":"###PAYMENT_TOKEN###"}} ,"instalment":{"interval":"1m" , "cycles" : "3"} ,"custom":{"lang":"EN"}}';
#!/usr/bin/node

    const https = require('https');
    // data sent in the body of the request
    const postData = JSON.stringify({
      "merchant": {
        "signature": "###YOUR_API_SIGNATURE###",
        "tariff": "###YOUR_TARIFF_ID###"
      },
      "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
        "token": "###PAYMENT_TOKEN###"
        }
      },
      "instalment":{"interval":"1m" , "cycles" : "3"},
      "custom": {
        "lang": "EN"
      }
    });

    const options = {
      hostname: 'payport.novalnet.de',
      port: 443,
      path: '/v2/payment',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(postData),
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
      },
    };

    const req = https.request(options, (res) => {
      console.log('statusCode:', res.statusCode);
      // console.log('headers:', res.headers);

      res.on('data', (d) => {
        process.stdout.write(d);
      });
    });

    req.on('error', (e) => {
      console.error('ERROR: ',e);
    });

    // Write data to request body
    req.write(postData);
    req.end();
#!/usr/bin/python3

    import http.client
    import json

    CONN = http.client.HTTPSConnection("payport.novalnet.de")
    PAYLOAD = json.dumps({
        "merchant": {
            "signature": "###YOUR_API_SIGNATURE###",
            "tariff": "###YOUR_TARIFF_ID###"
        },
        "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
        },
        "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
          "token": "###PAYMENT_TOKEN###"
        }
        },
      "instalment":{"interval":"1m" , "cycles" : "3"},
        "custom": {
            "lang": "EN"
        }
    })
    HEADERS = {
        'Content-Type': 'application/json',
        'Charset': 'utf-8',
        'Accept': 'application/json',
        'X-NN-Access-Key': '###YOUR_ENCODED_PAYMENT_ACCESS_KEY###'
    }
    CONN.request("POST", "/v2/payment", PAYLOAD, HEADERS)
    RES = CONN.getresponse()
    DATA = RES.read()
    print(DATA.decode("utf-8"))
#!/usr/lib/ruby

    require "uri"
    require "json"
    require "net/http"

    url = URI("https://payport.novalnet.de/v2/payment")

    https = Net::HTTP.new(url.host, url.port)
    https.use_ssl = true

    request = Net::HTTP::Post.new(url)
    request["Content-Type"] = "application/json"
    request["Accept"] = "application/json"
    request["Charset"] = "utf-8"
    request["X-NN-Access-Key"] = "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###"
    request.body = JSON.dump({
      "merchant": {
            "signature": "###YOUR_API_SIGNATURE###",
            "tariff": "###YOUR_TARIFF_ID###"
        },
        "customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
          "token": "###PAYMENT_TOKEN###"
        }
      },
      "instalment":{"interval":"1m" , "cycles" : "3"},
      "custom": {
        "lang": "EN"
      }
    })

    response = https.request(request)
    puts response.read_body
package main

    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )

    func main() {

      url := "https://payport.novalnet.de/v2/payment"
      method := "POST"

      payload := strings.NewReader(`{"merchant":{"signature":"###YOUR_API_SIGNATURE###", "tariff" : "###YOUR_TARIFF_ID###"},"customer": {
        "gender": "u",
        "first_name": "Max",
        "last_name": "Mustermann",
        "email": "###YOUR_MAIL###",
        "customer_ip": "###CUSTOMER_IP###",
        "customer_no": "###CUSTOMER_NUMBER###",
        "birth_date": "1992-06-10",
        "billing": {
          "street": "Musterstr",
          "house_no": "2",
          "city": "Musterhausen",
          "zip": "12345",
          "country_code": "DE",
          "company": "ABC GmbH"
        }
      },
      "transaction": {
        "payment_type": "###PAYMENT_TYPE###",
        "amount": "###TRANSACTION_AMOUNT###",
        "currency": "###TRANSACTION_CURRENCY###",
        "order_no": "###TRANSACTION_ORDER_NUMBER###",
        "test_mode": "###TEST_MODE###",
        "hook_url":"###YOUR_HOOK_URL###",
        "payment_data": {
            "token": "###PAYMENT_TOKEN###"
        }
      },
      "instalment":{"interval":"1m" , "cycles" : "3"},"custom":{"lang":"EN"}}`)

      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)

      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Content-Type", "application/json")
      req.Header.Add("Accept", "application/json")
      req.Header.Add("Charset", "utf-8")
      req.Header.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")

      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()

      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
/* List of required libraries (see also the import statements below): 
    - commons-logging-1.2.jar    
    - httpasyncclient-4.1.5.jar  
    - httpclient-4.3.3.jar  
    - httpcore-4.4.16.jar   
    - httpcore-nio-4.4.16.jar  
    - httpmime-4.5.14.jar      
    - json-20230227.jar  
    - unirest-java-3.9.00.jar
    */
    import java.io.*;

    import org.json.JSONArray;
    import org.apache.http.auth.*;
    import org.apache.http.nio.conn.*; 
    import org.apache.http.concurrent.*;
    import org.apache.http.nio.reactor.*;
    import org.apache.commons.logging.*;
    import org.apache.http.entity.mime.content.*; 
    import kong.unirest.*;


    public class TokenizationRequest {
      public static void main(String []args) throws Exception{
        Unirest.config().connectTimeout(1000).socketTimeout(2000);

        HttpResponse<String> response = Unirest.post("https://payport.novalnet.de/v2/payment")
          .header("Content-Type", "application/json")
          .header("Charset", "utf-8")
          .header("Accept", "application/json")
          .header("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###")
          .body("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}}, \"instalment\":{\"interval\":\"1m\" , \"cycles\" : \"3\"},\"custom\":{\"lang\":\"EN\"}}")
          .asString();
        
        System.out.println(response.getBody());
      }
    }
using System;
    using System.Net.Http;

    namespace TokenizationRequest
    {
      public class TokenizationRequest {

        public string check_Tokenization_request() {

          var client = new HttpClient();
          var request = new HttpRequestMessage(HttpMethod.Post, "https://payport.novalnet.de/v2/payment");

          request.Headers.Add("Charset", "utf-8");
          request.Headers.Add("Accept", "application/json");
          request.Headers.Add("X-NN-Access-Key", "###YOUR_ENCODED_PAYMENT_ACCESS_KEY###");
          var content = new StringContent("{\"merchant\":{\"signature\":\"###YOUR_API_SIGNATURE###\", \"tariff\" : \"###YOUR_TARIFF_ID###\"},\"customer\":{\"customer_ip\":\"###CUSTOMER_IP###\",\"gender\":\"u\", \"first_name\": \"Max\", \"last_name\": \"Mustermann\", \"email\": \"###YOUR_MAIL###\", \"birth_date\":\"1983-07-02\",\"billing\":{\"street\":\"Musterstr\",\"house_no\":\"2\",\"city\":\"Musterhausen\",\"zip\":\"12345\",\"country_code\":\"DE\",\"company\":\"ABC GmbH\"}},\"transaction\":{\"payment_type\": \"###PAYMENT_TYPE###\",\"amount\":\"###TRANSACTION_AMOUNT###\",\"currency\":\"EUR\",\"order_no\":\"###TRANSACTION_ORDER_NUMBER###\",\"test_mode\":\"###TEST_MODE###\",\"hook_url\":\"###YOUR_HOOK_URL###\",\"payment_data\":{\"token\":\"###PAYMENT_TOKEN###\"}},\"instalment\":{\"interval\":\"1m\" , \"cycles\" : \"3\"},\"custom\":{\"lang\":\"EN\"}}", null, "application/json");

          request.Content = content;
          var response = client.SendAsync(request).Result;
          response.EnsureSuccessStatusCode();
          var responseText = response.Content.ReadAsStringAsync().Result;
          Console.WriteLine(responseText);
          return responseText;
        }
        public static void Main() {
          var testRequest = new TokenizationRequest();
          testRequest.check_Tokenization_request(); 
        }

      }
    }