Fraud management guide

Last updated: 2026-03-19

With evolving AI-driven fraud schemes and the increasing economic impacts of friendly fraud, this fraud management solution offers merchants and Payment Service Providers (PSPs) AI-powered technology that tracks transactions from the start to post-checkout.

The solution addresses increasing fraud losses and operational costs by maximising automation, experience, and intelligence to reduce expenses. It provides comprehensive transaction and event tracking with digital identity solutions to build trust with each transaction, supported by dedicated Machine Learning technology for enhanced precision.

Customers can use a simple, lightweight API integration or a full Payments Orchestration Platform. In both cases, the solution tracks transactions at pre-authorisation, during checkout, and post-authorisation. Self-learning AI adapts to emerging threats and maximises conversions. The solution also ensures compliance (for example, PCI, 3DS, and SCA) and offers a suite of products for frictionless payment journeys.

The intuitive UI helps merchants and PSPs visualise impacts. It also supports new fraud and risk management strategies. It supports rules and business policies. It also supports lists and a feature-signal library. To track effectiveness and better understand trends, the solution includes an Analytics and Business Intelligence portal to provide key insights in real time. This combination helps organisations stay ahead of threats with enhanced predictability and security.

Key features

The simplified and precise decision-making capabilities are powered by an evolving set of complex algorithms and features that run in the background and provide customer peace of mind, showing that the solution can keep up with the pace of new fraud and payment trends. The following core features are distilled into key benefits for organisations across the landscape.

Patented Machine Learning technology

Self-learning algorithms aided by a global consortium across numerous industry sectors for enhanced precision.

The technology enables algorithms for customers to self-learn to update existing payments strategies, and reduce human hours spent on manually validating transactions.

Dedicated Machine Learning models

Focused Fraud Signals and Risk Models to combat fraud and run in parallel.

Focusing on the core challenges, the data science teams have leveraged AI technology and built dedicated models that provide Fraud Signals to detect Account Takeover (ATO), Anomaly (bot), Card Testing, and pre-/post-authorisation patterns. These models are able to run in parallel with each other to reduce fraud while optimising conversion rates. In addition, the solution provides risk scores for various industry sectors and geographies. It also offers custom models to optimise fraud and risk strategy.

Digital identity services

Advanced profiling for each transaction to build trust with digital identity.

The digital identity services leverage advanced AI and behavioural analytics to establish trust and ensure legitimate transactions. By orchestrating consumer data, the solution provides real-time fraud prevention designed to increase conversion rates and block sophisticated fraudsters.

Global consortium

Extensive intelligence with global footprint.

Backed by leading financial institutions, the global intelligence consortium analyses data to identify anomalies and fraudulent patterns that inform customers. This intelligence supports AI technology that self-learns new patterns. It also simplifies decision-making and boosts automation.

Use cases

Account Takeover Models detect and prevent unauthorised account access by tracking changes in customer behaviour, ensuring identification and proactive fraud prevention. These models provide valuable insights to analysts, helping them prioritise and handle alerts more effectively.

Anomaly or Card Testing Models identify unusual transaction patterns without predefined cases, offering flexible and accurate fraud detection for emerging threats. They look for deviations from the norm, such as spikes in transactional velocity or unusual use of phone numbers or emails.

Pre- and Post-Authorisation Models address payment issues and reduce false positives throughout the transaction life cycle by ensuring accurate transaction data to enhance fraud detection efficiency. These models support fixing payments data and track at multiple points to improve detection rates.

Customer or sector models are pre-built models that support various segments to implement ready-to-deploy fraud prevention ML models to combat sector specific threats and maximise revenue.

You can integrate Fraud Management in various ways:

  • As a standalone risk service
  • As a standalone risk service on stored payment data
  • In combination with a payment request

Information on how to implement the tieback message is available in the tieback message documentation.

Fraud Management is a real-time fraud prevention solution tailored to the needs of merchants, PSPs, acquirers, and everyone else processing payment transaction. To get a live configuration and account, please contact support.

📘

The examples in this guide support technical integrations, however, to get the best results from fraud screening we recommend working with our fraud management screening experts to define the best data and fraud rules for your business.

Fraud Management as a standalone risk service

There is a special endpoint for sending a fraud check against the Fraud Management API independent of a payment: https://sandbox-card.peachpayments.com/v2/redShield

A minimal request to Fraud Management would look like this:

curl https://sandbox-card.peachpayments.com/v2/redShield \
 -d "entityId=8a8294174e735d0c014e78cf26461790" \
 -d "merchantTransactionId=123412341234" \
 -d "amount=92.00" \
 -d "currency=EUR" \
 -d "paymentBrand=VISA" \
 -d "card.number=4200000000000000" \
 -d "card.expiryMonth=12" \
 -d "card.expiryYear=2027" \
 -d "card.holder=Test Holder" \
 -H "Authorization: Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=
public Dictionary<string, dynamic> Request() {
    Dictionary<string, dynamic> responseData;
    string data="entityId=8a8294174e735d0c014e78cf26461790" +
        "&merchantTransactionId=123412341234" +
        "&amount=92.00" +
        "&currency=EUR" +
        "&paymentBrand=VISA" +
        "&card.number=4200000000000000" +
        "&card.expiryMonth=12" +
        "&card.expiryYear=2027" +
        "&card.holder=Test Holder";
    string url = "https://sandbox-card.peachpayments.com/v2/redShield";
    byte[]  buffer = Encoding.ASCII.GetBytes(data);
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
    request.Method = "POST";
        request.Headers["Authorization"] = "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=";
    request.ContentType = "application/x-www-form-urlencoded";
    Stream PostData = request.GetRequestStream();
    PostData.Write(buffer, 0, buffer.Length);
    PostData.Close();
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        var s = new JavaScriptSerializer();
        responseData = s.Deserialize<Dictionary<string, dynamic>>(reader.ReadToEnd());
        reader.Close();
        dataStream.Close();
    }
    return responseData;
}

responseData = Request()["result"]["description"];
import groovy.json.JsonSlurper

public static String request() {
  def data = "entityId=8a8294174e735d0c014e78cf26461790" +
  "&merchantTransactionId=123412341234" +
  "&amount=92.00" +
  "&currency=EUR" +
  "&paymentBrand=VISA" +
  "&card.number=4200000000000000" +
  "&card.expiryMonth=12" +
  "&card.expiryYear=2027" +
  "&card.holder=Test Holder"
  def url = "https://sandbox-card.peachpayments.com/v2/redShield".toURL()
  def connection = url.openConnection()
  connection.setRequestMethod("POST")
  connection.setRequestProperty("Authorization","Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=")
  connection.doOutput = true
  connection.outputStream << data
  def json = new JsonSlurper().parseText(connection.inputStream.text)
  json
}
println request()
private String request() throws IOException {
    URL url = new URL("https://sandbox-card.peachpayments.com/v2/redShield");

    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
        conn.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=");
    conn.setDoInput(true);
    conn.setDoOutput(true);

    String data = ""
        + "entityId=8a8294174e735d0c014e78cf26461790"
        + "&merchantTransactionId=123412341234"
        + "&amount=92.00"
        + "&currency=EUR"
        + "&paymentBrand=VISA"
        + "&card.number=4200000000000000"
        + "&card.expiryMonth=12"
        + "&card.expiryYear=2027"
        + "&card.holder=Test Holder";

    DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
    wr.writeBytes(data);
    wr.flush();
    wr.close();
    int responseCode = conn.getResponseCode();
    InputStream is;

    if (responseCode >= 400) is = conn.getErrorStream();
    else is = conn.getInputStream();

    return IOUtils.toString(is);
}
const https = require('https');
const querystring = require('querystring');

const request = async () => {
    const path='/v2/redShield';
    const data = querystring.stringify({
        'entityId':'8a8294174e735d0c014e78cf26461790',
        'merchantTransactionId':'123412341234',
        'amount':'92.00',
        'currency':'EUR',
        'paymentBrand':'VISA',
        'card.number':'4200000000000000',
        'card.expiryMonth':'12',
        'card.expiryYear':'2027',
        'card.holder':'Test Holder'
    });
    const options = {
        port: 443,
        host: 'sandbox-card.peachpayments.com',
        path: path,
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': data.length,
            'Authorization':'Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ='
        }
    };
    return new Promise((resolve, reject) => {
        const postRequest = https.request(options, function(res) {
            const buf = [];
            res.on('data', chunk => {
                buf.push(Buffer.from(chunk));
            });
            res.on('end', () => {
                const jsonString = Buffer.concat(buf).toString('utf8');
                try {
                    resolve(JSON.parse(jsonString));
                } catch (error) {
                    reject(error);
                }
            });
        });
        postRequest.on('error', reject);
        postRequest.write(data);
        postRequest.end();
    });
};

request().then(console.log).catch(console.error);
function request() {
    $url = "https://sandbox-card.peachpayments.com/v2/redShield";
    $data = "entityId=8a8294174e735d0c014e78cf26461790" .
                "&merchantTransactionId=123412341234" .
                "&amount=92.00" .
                "&currency=EUR" .
                "&paymentBrand=VISA" .
                "&card.number=4200000000000000" .
                "&card.expiryMonth=12" .
                "&card.expiryYear=2027" .
                "&card.holder=Test Holder";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                   'Authorization:Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ='));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// this should be set to true in production
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $responseData = curl_exec($ch);
    if(curl_errno($ch)) {
        return curl_error($ch);
    }
    curl_close($ch);
    return $responseData;
}
$responseData = request();
try:
    from urllib.parse import urlencode
    from urllib.request import build_opener, Request, HTTPHandler
    from urllib.error import HTTPError, URLError
except ImportError:
    from urllib import urlencode
    from urllib2 import build_opener, Request, HTTPHandler, HTTPError, URLError
import json

def request():
    url = "https://sandbox-card.peachpayments.com/v2/redShield"
    data = {
        'entityId' : '8a8294174e735d0c014e78cf26461790',
        'merchantTransactionId' : '123412341234',
        'amount' : '92.00',
        'currency' : 'EUR',
        'paymentBrand' : 'VISA',
        'card.number' : '4200000000000000',
        'card.expiryMonth' : '12',
        'card.expiryYear' : '2027',
        'card.holder' : 'Test Holder'
    }
    try:
        opener = build_opener(HTTPHandler)
        request = Request(url, data=urlencode(data).encode('utf-8'))
        request.add_header('Authorization', 'Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=')
        request.get_method = lambda: 'POST'
        response = opener.open(request)
        return json.loads(response.read());
    except HTTPError as e:
        return json.loads(e.read());
    except URLError as e:
        return e.reason;

responseData = request();
print(responseData);
require 'net/https'
require 'uri'
require 'json'

def request()
    uri = URI('https://sandbox-card.peachpayments.com/v2/redShield')
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    req = Net::HTTP::Post.new(uri.path)
    req.set_form_data({
        'entityId' => '8a8294174e735d0c014e78cf26461790',
        'merchantTransactionId' => '123412341234',
        'amount' => '92.00',
        'currency' => 'EUR',
        'paymentBrand' => 'VISA',
        'card.number' => '4200000000000000',
        'card.expiryMonth' => '12',
        'card.expiryYear' => '2027',
        'card.holder' => 'Test Holder'
    })
    res = http.request(req)
    return JSON.parse(res.body)
end

puts request()
def initialPayment : String = {
    val url = "https://sandbox-card.peachpayments.com/v2/redShield"
    val data = (""
        + "entityId=8a8294174e735d0c014e78cf26461790"
        + "&merchantTransactionId=123412341234"
        + "&amount=92.00"
        + "&currency=EUR"
        + "&paymentBrand=VISA"
        + "&card.number=4200000000000000"
        + "&card.expiryMonth=12"
        + "&card.expiryYear=2027"
        + "&card.holder=Test Holder"
    )
    val conn = new URL(url).openConnection()

    conn match {
        case secureConn: HttpsURLConnection  => secureConn.setRequestMethod("POST")
        case _ => throw new ClassCastException
    }
    conn.setDoInput(true)
    conn.setDoOutput(true)
    IOUtils.write(data, conn.getOutputStream())
    conn.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=")
    conn.connect()
    if (conn.getResponseCode() >= 400) {
        return IOUtils.toString(conn.getErrorStream())
    }
    else {
        return IOUtils.toString(conn.getInputStream())
    }
}
Public Function Request() As Dictionary(Of String, Object)
    Dim url As String = "https://sandbox-card.peachpayments.com/v2/redShield"
    Dim data As String = "" +
        "entityId=8a8294174e735d0c014e78cf26461790" +
        "&merchantTransactionId=123412341234" +
        "&amount=92.00" +
        "&currency=EUR" +
        "&paymentBrand=VISA" +
        "&card.number=4200000000000000" +
        "&card.expiryMonth=12" +
        "&card.expiryYear=2027" +
        "&card.holder=Test Holder"

    Dim req As WebRequest = WebRequest.Create(url)
    req.Method = "POST"
        req.Headers.Add("Authorization", "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=")
    req.ContentType = "application/x-www-form-urlencoded"
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(data)
    req.ContentLength = byteArray.Length
    Dim dataStream As Stream = req.GetRequestStream()
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()
    Dim res As WebResponse = req.GetResponse()
    Dim resStream = res.GetResponseStream()
    Dim reader As New StreamReader(resStream)
    Dim response As String = reader.ReadToEnd()
    reader.Close()
    resStream.Close()
    res.Close()
    Dim jss As New System.Web.Script.Serialization.JavaScriptSerializer()
    Dim dict As Dictionary(Of String, Object) = jss.Deserialize(Of Dictionary(Of String, Object))(response)

    Return dict
End Function

responseData = Request()("result")("description")

If you compare this to an ordinary server-to-server credit card request, the two are almost the same. The only field that is not mandatory for a payment is the merchantTransactionId.

Depending on business needs and Fraud Management account setup, send more data. These parameter groups are relevant for a Fraud Management transaction. For an extensive explanation of the parameters, see the API reference:

  • customer
  • billing
  • shipping
  • cart
  • threeDSecure
  • giftcard
  • risk

Therefore, a full requests that uses all parameters for Fraud Management would look like this:

curl https://sandbox-card.peachpayments.com/v2/redShield \
 -d "entityId=8a8294174e735d0c014e78cf26461790" \
 -d "merchantTransactionId=123412341234" \
 -d "amount=92.00" \
 -d "currency=EUR" \
 -d "paymentBrand=VISA" \
 -d "card.number=4200000000000000" \
 -d "card.expiryMonth=12" \
 -d "card.expiryYear=2027" \
 -d "card.holder=Test Holder" \
 -d "card.cvv=123" \
 -d "billing.street1=Streetwithaverylongnamethatoverflows 1" \
 -d "billing.street2=Street 2" \
 -d "customer.birthDate=2010-10-10" \
 -d "billing.city=Berlin" \
 -d "billing.country=DE" \
 -d "[email protected]" \
 -d "customer.givenName=Test" \
 -d "customer.phone=004918912312" \
 -d "customer.merchantCustomerId=merchantcustomer.averylong.value.wilgettrimmed" \
 -d "customer.ip=123.123.123.123" \
 -d "customer.surname=Holder" \
 -d "customer.middleName=Kyros" \
 -d "customer.mobile=00491231231" \
 -d "billing.postcode=80441" \
 -d "billing.state=BY" \
 -d "customer.workPhone=004978978978" \
 -d "descriptor=somedescriptor" \
 -d "giftCard.type=BIRTHDAY" \
 -d "giftCard.message=Happy Birthday Dareios" \
 -d "customer.browserFingerprint.value=browserFingerPrintValueOfShopper" \
 -d "customer.status=NEW" \
 -d "risk.serviceId=A" \
 -d "risk.parameters[USER_DATA1]=custom-defined-value 1" \
 -d "risk.parameters[USER_DATA2]=custom-defined-value2" \
 -d "risk.parameters[USER_DATA3]=custom-defined-value 3" \
 -d "risk.amount=1.12" \
 -d "risk.merchantWebsite=www.test.com" \
 -d "risk.accountToken=123456" \
 -d "risk.brand=VISA" \
 -d "cart.items[0].name=myitem" \
 -d "cart.items[0].price=1.12" \
 -d "cart.items[0].merchantItemId=112345768" \
 -d "cart.items[0].sku=mysku1" \
 -d "cart.items[0].originalPrice=1.12" \
 -d "cart.items[0].giftMessage=A special message" \
 -d "cart.items[0].description=itemDescription" \
 -d "cart.items[0].quantity=14" \
 -d "cart.items[0].shippingInstructions=Some instructions" \
 -d "cart.items[0].shippingMethod=DHL" \
 -d "cart.items[0].shippingTrackingNumber=12345678" \
 -d "shipping.street1=Shipstraat 1" \
 -d "shipping.street2=Shipstraat2" \
 -d "shipping.city=Amsterdam" \
 -d "shipping.country=NL" \
 -d "[email protected]" \
 -d "shipping.customer.givenName=Wilhelm" \
 -d "shipping.customer.phone=00422343978234987" \
 -d "shipping.customer.merchantCustomerId=id123123merchcust" \
 -d "shipping.customer.surname=van Oranje" \
 -d "shipping.customer.middleName=King" \
 -d "shipping.customer.mobile=4211113332222" \
 -d "shipping.method=NEXT_DAY_OVERNIGHT" \
 -d "shipping.comment=my shipping comments" \
 -d "shipping.postcode=12345" \
 -d "shipping.state=NH" \
 -d "shipping.customer.workPhone=0042123123" \
 -d "threeDSecure.verificationId=AAACAgSRBklmQCFgMpEGAAAAAAA=" \
 -d "threeDSecure.eci=05" \
 -d "threeDSecure.xid=CAACCVVUlwCXUyhQNlSXAAAAAAA=" \
 -H "Authorization: Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=
public Dictionary<string, dynamic> Request() {
    Dictionary<string, dynamic> responseData;
    string data="entityId=8a8294174e735d0c014e78cf26461790" +
        "&merchantTransactionId=123412341234" +
        "&amount=92.00" +
        "&currency=EUR" +
        "&paymentBrand=VISA" +
        "&card.number=4200000000000000" +
        "&card.expiryMonth=12" +
        "&card.expiryYear=2027" +
        "&card.holder=Test Holder" +
        "&card.cvv=123" +
        "&billing.street1=Streetwithaverylongnamethatoverflows 1" +
        "&billing.street2=Street 2" +
        "&customer.birthDate=2010-10-10" +
        "&billing.city=Berlin" +
        "&billing.country=DE" +
        "&[email protected]" +
        "&customer.givenName=Test" +
        "&customer.phone=004918912312" +
        "&customer.merchantCustomerId=merchantcustomer.averylong.value.wilgettrimmed" +
        "&customer.ip=123.123.123.123" +
        "&customer.surname=Holder" +
        "&customer.middleName=Kyros" +
        "&customer.mobile=00491231231" +
        "&billing.postcode=80441" +
        "&billing.state=BY" +
        "&customer.workPhone=004978978978" +
        "&descriptor=somedescriptor" +
        "&giftCard.type=BIRTHDAY" +
        "&giftCard.message=Happy Birthday Dareios" +
        "&customer.browserFingerprint.value=browserFingerPrintValueOfShopper" +
        "&customer.status=NEW" +
        "&risk.serviceId=A" +
        "&risk.parameters[USER_DATA1]=custom-defined-value 1" +
        "&risk.parameters[USER_DATA2]=custom-defined-value2" +
        "&risk.parameters[USER_DATA3]=custom-defined-value 3" +
        "&risk.amount=1.12" +
        "&risk.merchantWebsite=www.test.com" +
        "&risk.accountToken=123456" +
        "&risk.brand=VISA" +
        "&cart.items[0].name=myitem" +
        "&cart.items[0].price=1.12" +
        "&cart.items[0].merchantItemId=112345768" +
        "&cart.items[0].sku=mysku1" +
        "&cart.items[0].originalPrice=1.12" +
        "&cart.items[0].giftMessage=A special message" +
        "&cart.items[0].description=itemDescription" +
        "&cart.items[0].quantity=14" +
        "&cart.items[0].shippingInstructions=Some instructions" +
        "&cart.items[0].shippingMethod=DHL" +
        "&cart.items[0].shippingTrackingNumber=12345678" +
        "&shipping.street1=Shipstraat 1" +
        "&shipping.street2=Shipstraat2" +
        "&shipping.city=Amsterdam" +
        "&shipping.country=NL" +
        "&[email protected]" +
        "&shipping.customer.givenName=Wilhelm" +
        "&shipping.customer.phone=00422343978234987" +
        "&shipping.customer.merchantCustomerId=id123123merchcust" +
        "&shipping.customer.surname=van Oranje" +
        "&shipping.customer.middleName=King" +
        "&shipping.customer.mobile=4211113332222" +
        "&shipping.method=NEXT_DAY_OVERNIGHT" +
        "&shipping.comment=my shipping comments" +
        "&shipping.postcode=12345" +
        "&shipping.state=NH" +
        "&shipping.customer.workPhone=0042123123" +
        "&threeDSecure.verificationId=AAACAgSRBklmQCFgMpEGAAAAAAA=" +
        "&threeDSecure.eci=05" +
        "&threeDSecure.xid=CAACCVVUlwCXUyhQNlSXAAAAAAA=";
    string url = "https://sandbox-card.peachpayments.com/v2/redShield";
    byte[]  buffer = Encoding.ASCII.GetBytes(data);
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
    request.Method = "POST";
        request.Headers["Authorization"] = "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=";
    request.ContentType = "application/x-www-form-urlencoded";
    Stream PostData = request.GetRequestStream();
    PostData.Write(buffer, 0, buffer.Length);
    PostData.Close();
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        var s = new JavaScriptSerializer();
        responseData = s.Deserialize<Dictionary<string, dynamic>>(reader.ReadToEnd());
        reader.Close();
        dataStream.Close();
    }
    return responseData;
}

responseData = Request()["result"]["description"];
import groovy.json.JsonSlurper

public static String request() {
  def data = "entityId=8a8294174e735d0c014e78cf26461790" +
  "&merchantTransactionId=123412341234" +
  "&amount=92.00" +
  "&currency=EUR" +
  "&paymentBrand=VISA" +
  "&card.number=4200000000000000" +
  "&card.expiryMonth=12" +
  "&card.expiryYear=2027" +
  "&card.holder=Test Holder" +
  "&card.cvv=123" +
  "&billing.street1=Streetwithaverylongnamethatoverflows 1" +
  "&billing.street2=Street 2" +
  "&customer.birthDate=2010-10-10" +
  "&billing.city=Berlin" +
  "&billing.country=DE" +
  "&[email protected]" +
  "&customer.givenName=Test" +
  "&customer.phone=004918912312" +
  "&customer.merchantCustomerId=merchantcustomer.averylong.value.wilgettrimmed" +
  "&customer.ip=123.123.123.123" +
  "&customer.surname=Holder" +
  "&customer.middleName=Kyros" +
  "&customer.mobile=00491231231" +
  "&billing.postcode=80441" +
  "&billing.state=BY" +
  "&customer.workPhone=004978978978" +
  "&descriptor=somedescriptor" +
  "&giftCard.type=BIRTHDAY" +
  "&giftCard.message=Happy Birthday Dareios" +
  "&customer.browserFingerprint.value=browserFingerPrintValueOfShopper" +
  "&customer.status=NEW" +
  "&risk.serviceId=A" +
  "&risk.parameters[USER_DATA1]=custom-defined-value 1" +
  "&risk.parameters[USER_DATA2]=custom-defined-value2" +
  "&risk.parameters[USER_DATA3]=custom-defined-value 3" +
  "&risk.amount=1.12" +
  "&risk.merchantWebsite=www.test.com" +
  "&risk.accountToken=123456" +
  "&risk.brand=VISA" +
  "&cart.items[0].name=myitem" +
  "&cart.items[0].price=1.12" +
  "&cart.items[0].merchantItemId=112345768" +
  "&cart.items[0].sku=mysku1" +
  "&cart.items[0].originalPrice=1.12" +
  "&cart.items[0].giftMessage=A special message" +
  "&cart.items[0].description=itemDescription" +
  "&cart.items[0].quantity=14" +
  "&cart.items[0].shippingInstructions=Some instructions" +
  "&cart.items[0].shippingMethod=DHL" +
  "&cart.items[0].shippingTrackingNumber=12345678" +
  "&shipping.street1=Shipstraat 1" +
  "&shipping.street2=Shipstraat2" +
  "&shipping.city=Amsterdam" +
  "&shipping.country=NL" +
  "&[email protected]" +
  "&shipping.customer.givenName=Wilhelm" +
  "&shipping.customer.phone=00422343978234987" +
  "&shipping.customer.merchantCustomerId=id123123merchcust" +
  "&shipping.customer.surname=van Oranje" +
  "&shipping.customer.middleName=King" +
  "&shipping.customer.mobile=4211113332222" +
  "&shipping.method=NEXT_DAY_OVERNIGHT" +
  "&shipping.comment=my shipping comments" +
  "&shipping.postcode=12345" +
  "&shipping.state=NH" +
  "&shipping.customer.workPhone=0042123123" +
  "&threeDSecure.verificationId=AAACAgSRBklmQCFgMpEGAAAAAAA=" +
  "&threeDSecure.eci=05" +
  "&threeDSecure.xid=CAACCVVUlwCXUyhQNlSXAAAAAAA="
  def url = "https://sandbox-card.peachpayments.com/v2/redShield".toURL()
  def connection = url.openConnection()
  connection.setRequestMethod("POST")
  connection.setRequestProperty("Authorization","Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=")
  connection.doOutput = true
  connection.outputStream << data
  def json = new JsonSlurper().parseText(connection.inputStream.text)
  json
}
println request()
private String request() throws IOException {
    URL url = new URL("https://sandbox-card.peachpayments.com/v2/redShield");

    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
        conn.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=");
    conn.setDoInput(true);
    conn.setDoOutput(true);

    String data = ""
        + "entityId=8a8294174e735d0c014e78cf26461790"
        + "&merchantTransactionId=123412341234"
        + "&amount=92.00"
        + "&currency=EUR"
        + "&paymentBrand=VISA"
        + "&card.number=4200000000000000"
        + "&card.expiryMonth=12"
        + "&card.expiryYear=2027"
        + "&card.holder=Test Holder"
        + "&card.cvv=123"
        + "&billing.street1=Streetwithaverylongnamethatoverflows 1"
        + "&billing.street2=Street 2"
        + "&customer.birthDate=2010-10-10"
        + "&billing.city=Berlin"
        + "&billing.country=DE"
        + "&[email protected]"
        + "&customer.givenName=Test"
        + "&customer.phone=004918912312"
        + "&customer.merchantCustomerId=merchantcustomer.averylong.value.wilgettrimmed"
        + "&customer.ip=123.123.123.123"
        + "&customer.surname=Holder"
        + "&customer.middleName=Kyros"
        + "&customer.mobile=00491231231"
        + "&billing.postcode=80441"
        + "&billing.state=BY"
        + "&customer.workPhone=004978978978"
        + "&descriptor=somedescriptor"
        + "&giftCard.type=BIRTHDAY"
        + "&giftCard.message=Happy Birthday Dareios"
        + "&customer.browserFingerprint.value=browserFingerPrintValueOfShopper"
        + "&customer.status=NEW"
        + "&risk.serviceId=A"
        + "&risk.parameters[USER_DATA1]=custom-defined-value 1"
        + "&risk.parameters[USER_DATA2]=custom-defined-value2"
        + "&risk.parameters[USER_DATA3]=custom-defined-value 3"
        + "&risk.amount=1.12"
        + "&risk.merchantWebsite=www.test.com"
        + "&risk.accountToken=123456"
        + "&risk.brand=VISA"
        + "&cart.items[0].name=myitem"
        + "&cart.items[0].price=1.12"
        + "&cart.items[0].merchantItemId=112345768"
        + "&cart.items[0].sku=mysku1"
        + "&cart.items[0].originalPrice=1.12"
        + "&cart.items[0].giftMessage=A special message"
        + "&cart.items[0].description=itemDescription"
        + "&cart.items[0].quantity=14"
        + "&cart.items[0].shippingInstructions=Some instructions"
        + "&cart.items[0].shippingMethod=DHL"
        + "&cart.items[0].shippingTrackingNumber=12345678"
        + "&shipping.street1=Shipstraat 1"
        + "&shipping.street2=Shipstraat2"
        + "&shipping.city=Amsterdam"
        + "&shipping.country=NL"
        + "&[email protected]"
        + "&shipping.customer.givenName=Wilhelm"
        + "&shipping.customer.phone=00422343978234987"
        + "&shipping.customer.merchantCustomerId=id123123merchcust"
        + "&shipping.customer.surname=van Oranje"
        + "&shipping.customer.middleName=King"
        + "&shipping.customer.mobile=4211113332222"
        + "&shipping.method=NEXT_DAY_OVERNIGHT"
        + "&shipping.comment=my shipping comments"
        + "&shipping.postcode=12345"
        + "&shipping.state=NH"
        + "&shipping.customer.workPhone=0042123123"
        + "&threeDSecure.verificationId=AAACAgSRBklmQCFgMpEGAAAAAAA="
        + "&threeDSecure.eci=05"
        + "&threeDSecure.xid=CAACCVVUlwCXUyhQNlSXAAAAAAA=";

    DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
    wr.writeBytes(data);
    wr.flush();
    wr.close();
    int responseCode = conn.getResponseCode();
    InputStream is;

    if (responseCode >= 400) is = conn.getErrorStream();
    else is = conn.getInputStream();

    return IOUtils.toString(is);
}
const https = require('https');
const querystring = require('querystring');

const request = async () => {
    const path='/v2/redShield';
    const data = querystring.stringify({
        'entityId':'8a8294174e735d0c014e78cf26461790',
        'merchantTransactionId':'123412341234',
        'amount':'92.00',
        'currency':'EUR',
        'paymentBrand':'VISA',
        'card.number':'4200000000000000',
        'card.expiryMonth':'12',
        'card.expiryYear':'2027',
        'card.holder':'Test Holder',
        'card.cvv':'123',
        'billing.street1':'Streetwithaverylongnamethatoverflows 1',
        'billing.street2':'Street 2',
        'customer.birthDate':'2010-10-10',
        'billing.city':'Berlin',
        'billing.country':'DE',
        'customer.email':'[email protected]',
        'customer.givenName':'Test',
        'customer.phone':'004918912312',
        'customer.merchantCustomerId':'merchantcustomer.averylong.value.wilgettrimmed',
        'customer.ip':'123.123.123.123',
        'customer.surname':'Holder',
        'customer.middleName':'Kyros',
        'customer.mobile':'00491231231',
        'billing.postcode':'80441',
        'billing.state':'BY',
        'customer.workPhone':'004978978978',
        'descriptor':'somedescriptor',
        'giftCard.type':'BIRTHDAY',
        'giftCard.message':'Happy Birthday Dareios',
        'customer.browserFingerprint.value':'browserFingerPrintValueOfShopper',
        'customer.status':'NEW',
        'risk.serviceId':'A',
        'risk.parameters[USER_DATA1]':'custom-defined-value 1',
        'risk.parameters[USER_DATA2]':'custom-defined-value2',
        'risk.parameters[USER_DATA3]':'custom-defined-value 3',
        'risk.amount':'1.12',
        'risk.merchantWebsite':'www.test.com',
        'risk.accountToken':'123456',
        'risk.brand':'VISA',
        'cart.items[0].name':'myitem',
        'cart.items[0].price':'1.12',
        'cart.items[0].merchantItemId':'112345768',
        'cart.items[0].sku':'mysku1',
        'cart.items[0].originalPrice':'1.12',
        'cart.items[0].giftMessage':'A special message',
        'cart.items[0].description':'itemDescription',
        'cart.items[0].quantity':'14',
        'cart.items[0].shippingInstructions':'Some instructions',
        'cart.items[0].shippingMethod':'DHL',
        'cart.items[0].shippingTrackingNumber':'12345678',
        'shipping.street1':'Shipstraat 1',
        'shipping.street2':'Shipstraat2',
        'shipping.city':'Amsterdam',
        'shipping.country':'NL',
        'shipping.customer.email':'[email protected]',
        'shipping.customer.givenName':'Wilhelm',
        'shipping.customer.phone':'00422343978234987',
        'shipping.customer.merchantCustomerId':'id123123merchcust',
        'shipping.customer.surname':'van Oranje',
        'shipping.customer.middleName':'King',
        'shipping.customer.mobile':'4211113332222',
        'shipping.method':'NEXT_DAY_OVERNIGHT',
        'shipping.comment':'my shipping comments',
        'shipping.postcode':'12345',
        'shipping.state':'NH',
        'shipping.customer.workPhone':'0042123123',
        'threeDSecure.verificationId':'AAACAgSRBklmQCFgMpEGAAAAAAA=',
        'threeDSecure.eci':'05',
        'threeDSecure.xid':'CAACCVVUlwCXUyhQNlSXAAAAAAA='
    });
    const options = {
        port: 443,
        host: 'sandbox-card.peachpayments.com',
        path: path,
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': data.length,
            'Authorization':'Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ='
        }
    };
    return new Promise((resolve, reject) => {
        const postRequest = https.request(options, function(res) {
            const buf = [];
            res.on('data', chunk => {
                buf.push(Buffer.from(chunk));
            });
            res.on('end', () => {
                const jsonString = Buffer.concat(buf).toString('utf8');
                try {
                    resolve(JSON.parse(jsonString));
                } catch (error) {
                    reject(error);
                }
            });
        });
        postRequest.on('error', reject);
        postRequest.write(data);
        postRequest.end();
    });
};

request().then(console.log).catch(console.error);
function request() {
    $url = "https://sandbox-card.peachpayments.com/v2/redShield";
    $data = "entityId=8a8294174e735d0c014e78cf26461790" .
                "&merchantTransactionId=123412341234" .
                "&amount=92.00" .
                "&currency=EUR" .
                "&paymentBrand=VISA" .
                "&card.number=4200000000000000" .
                "&card.expiryMonth=12" .
                "&card.expiryYear=2027" .
                "&card.holder=Test Holder" .
                "&card.cvv=123" .
                "&billing.street1=Streetwithaverylongnamethatoverflows 1" .
                "&billing.street2=Street 2" .
                "&customer.birthDate=2010-10-10" .
                "&billing.city=Berlin" .
                "&billing.country=DE" .
                "&[email protected]" .
                "&customer.givenName=Test" .
                "&customer.phone=004918912312" .
                "&customer.merchantCustomerId=merchantcustomer.averylong.value.wilgettrimmed" .
                "&customer.ip=123.123.123.123" .
                "&customer.surname=Holder" .
                "&customer.middleName=Kyros" .
                "&customer.mobile=00491231231" .
                "&billing.postcode=80441" .
                "&billing.state=BY" .
                "&customer.workPhone=004978978978" .
                "&descriptor=somedescriptor" .
                "&giftCard.type=BIRTHDAY" .
                "&giftCard.message=Happy Birthday Dareios" .
                "&customer.browserFingerprint.value=browserFingerPrintValueOfShopper" .
                "&customer.status=NEW" .
                "&risk.serviceId=A" .
                "&risk.parameters[USER_DATA1]=custom-defined-value 1" .
                "&risk.parameters[USER_DATA2]=custom-defined-value2" .
                "&risk.parameters[USER_DATA3]=custom-defined-value 3" .
                "&risk.amount=1.12" .
                "&risk.merchantWebsite=www.test.com" .
                "&risk.accountToken=123456" .
                "&risk.brand=VISA" .
                "&cart.items[0].name=myitem" .
                "&cart.items[0].price=1.12" .
                "&cart.items[0].merchantItemId=112345768" .
                "&cart.items[0].sku=mysku1" .
                "&cart.items[0].originalPrice=1.12" .
                "&cart.items[0].giftMessage=A special message" .
                "&cart.items[0].description=itemDescription" .
                "&cart.items[0].quantity=14" .
                "&cart.items[0].shippingInstructions=Some instructions" .
                "&cart.items[0].shippingMethod=DHL" .
                "&cart.items[0].shippingTrackingNumber=12345678" .
                "&shipping.street1=Shipstraat 1" .
                "&shipping.street2=Shipstraat2" .
                "&shipping.city=Amsterdam" .
                "&shipping.country=NL" .
                "&[email protected]" .
                "&shipping.customer.givenName=Wilhelm" .
                "&shipping.customer.phone=00422343978234987" .
                "&shipping.customer.merchantCustomerId=id123123merchcust" .
                "&shipping.customer.surname=van Oranje" .
                "&shipping.customer.middleName=King" .
                "&shipping.customer.mobile=4211113332222" .
                "&shipping.method=NEXT_DAY_OVERNIGHT" .
                "&shipping.comment=my shipping comments" .
                "&shipping.postcode=12345" .
                "&shipping.state=NH" .
                "&shipping.customer.workPhone=0042123123" .
                "&threeDSecure.verificationId=AAACAgSRBklmQCFgMpEGAAAAAAA=" .
                "&threeDSecure.eci=05" .
                "&threeDSecure.xid=CAACCVVUlwCXUyhQNlSXAAAAAAA=";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                   'Authorization:Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ='));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// this should be set to true in production
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $responseData = curl_exec($ch);
    if(curl_errno($ch)) {
        return curl_error($ch);
    }
    curl_close($ch);
    return $responseData;
}
$responseData = request();
try:
    from urllib.parse import urlencode
    from urllib.request import build_opener, Request, HTTPHandler
    from urllib.error import HTTPError, URLError
except ImportError:
    from urllib import urlencode
    from urllib2 import build_opener, Request, HTTPHandler, HTTPError, URLError
import json

def request():
    url = "https://sandbox-card.peachpayments.com/v2/redShield"
    data = {
        'entityId' : '8a8294174e735d0c014e78cf26461790',
        'merchantTransactionId' : '123412341234',
        'amount' : '92.00',
        'currency' : 'EUR',
        'paymentBrand' : 'VISA',
        'card.number' : '4200000000000000',
        'card.expiryMonth' : '12',
        'card.expiryYear' : '2027',
        'card.holder' : 'Test Holder',
        'card.cvv' : '123',
        'billing.street1' : 'Streetwithaverylongnamethatoverflows 1',
        'billing.street2' : 'Street 2',
        'customer.birthDate' : '2010-10-10',
        'billing.city' : 'Berlin',
        'billing.country' : 'DE',
        'customer.email' : '[email protected]',
        'customer.givenName' : 'Test',
        'customer.phone' : '004918912312',
        'customer.merchantCustomerId' : 'merchantcustomer.averylong.value.wilgettrimmed',
        'customer.ip' : '123.123.123.123',
        'customer.surname' : 'Holder',
        'customer.middleName' : 'Kyros',
        'customer.mobile' : '00491231231',
        'billing.postcode' : '80441',
        'billing.state' : 'BY',
        'customer.workPhone' : '004978978978',
        'descriptor' : 'somedescriptor',
        'giftCard.type' : 'BIRTHDAY',
        'giftCard.message' : 'Happy Birthday Dareios',
        'customer.browserFingerprint.value' : 'browserFingerPrintValueOfShopper',
        'customer.status' : 'NEW',
        'risk.serviceId' : 'A',
        'risk.parameters[USER_DATA1]' : 'custom-defined-value 1',
        'risk.parameters[USER_DATA2]' : 'custom-defined-value2',
        'risk.parameters[USER_DATA3]' : 'custom-defined-value 3',
        'risk.amount' : '1.12',
        'risk.merchantWebsite' : 'www.test.com',
        'risk.accountToken' : '123456',
        'risk.brand' : 'VISA',
        'cart.items[0].name' : 'myitem',
        'cart.items[0].price' : '1.12',
        'cart.items[0].merchantItemId' : '112345768',
        'cart.items[0].sku' : 'mysku1',
        'cart.items[0].originalPrice' : '1.12',
        'cart.items[0].giftMessage' : 'A special message',
        'cart.items[0].description' : 'itemDescription',
        'cart.items[0].quantity' : '14',
        'cart.items[0].shippingInstructions' : 'Some instructions',
        'cart.items[0].shippingMethod' : 'DHL',
        'cart.items[0].shippingTrackingNumber' : '12345678',
        'shipping.street1' : 'Shipstraat 1',
        'shipping.street2' : 'Shipstraat2',
        'shipping.city' : 'Amsterdam',
        'shipping.country' : 'NL',
        'shipping.customer.email' : '[email protected]',
        'shipping.customer.givenName' : 'Wilhelm',
        'shipping.customer.phone' : '00422343978234987',
        'shipping.customer.merchantCustomerId' : 'id123123merchcust',
        'shipping.customer.surname' : 'van Oranje',
        'shipping.customer.middleName' : 'King',
        'shipping.customer.mobile' : '4211113332222',
        'shipping.method' : 'NEXT_DAY_OVERNIGHT',
        'shipping.comment' : 'my shipping comments',
        'shipping.postcode' : '12345',
        'shipping.state' : 'NH',
        'shipping.customer.workPhone' : '0042123123',
        'threeDSecure.verificationId' : 'AAACAgSRBklmQCFgMpEGAAAAAAA=',
        'threeDSecure.eci' : '05',
        'threeDSecure.xid' : 'CAACCVVUlwCXUyhQNlSXAAAAAAA='
    }
    try:
        opener = build_opener(HTTPHandler)
        request = Request(url, data=urlencode(data).encode('utf-8'))
        request.add_header('Authorization', 'Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=')
        request.get_method = lambda: 'POST'
        response = opener.open(request)
        return json.loads(response.read());
    except HTTPError as e:
        return json.loads(e.read());
    except URLError as e:
        return e.reason;

responseData = request();
print(responseData);
require 'net/https'
require 'uri'
require 'json'

def request()
    uri = URI('https://sandbox-card.peachpayments.com/v2/redShield')
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    req = Net::HTTP::Post.new(uri.path)
    req.set_form_data({
        'entityId' => '8a8294174e735d0c014e78cf26461790',
        'merchantTransactionId' => '123412341234',
        'amount' => '92.00',
        'currency' => 'EUR',
        'paymentBrand' => 'VISA',
        'card.number' => '4200000000000000',
        'card.expiryMonth' => '12',
        'card.expiryYear' => '2027',
        'card.holder' => 'Test Holder',
        'card.cvv' => '123',
        'billing.street1' => 'Streetwithaverylongnamethatoverflows 1',
        'billing.street2' => 'Street 2',
        'customer.birthDate' => '2010-10-10',
        'billing.city' => 'Berlin',
        'billing.country' => 'DE',
        'customer.email' => '[email protected]',
        'customer.givenName' => 'Test',
        'customer.phone' => '004918912312',
        'customer.merchantCustomerId' => 'merchantcustomer.averylong.value.wilgettrimmed',
        'customer.ip' => '123.123.123.123',
        'customer.surname' => 'Holder',
        'customer.middleName' => 'Kyros',
        'customer.mobile' => '00491231231',
        'billing.postcode' => '80441',
        'billing.state' => 'BY',
        'customer.workPhone' => '004978978978',
        'descriptor' => 'somedescriptor',
        'giftCard.type' => 'BIRTHDAY',
        'giftCard.message' => 'Happy Birthday Dareios',
        'customer.browserFingerprint.value' => 'browserFingerPrintValueOfShopper',
        'customer.status' => 'NEW',
        'risk.serviceId' => 'A',
        'risk.parameters[USER_DATA1]' => 'custom-defined-value 1',
        'risk.parameters[USER_DATA2]' => 'custom-defined-value2',
        'risk.parameters[USER_DATA3]' => 'custom-defined-value 3',
        'risk.amount' => '1.12',
        'risk.merchantWebsite' => 'www.test.com',
        'risk.accountToken' => '123456',
        'risk.brand' => 'VISA',
        'cart.items[0].name' => 'myitem',
        'cart.items[0].price' => '1.12',
        'cart.items[0].merchantItemId' => '112345768',
        'cart.items[0].sku' => 'mysku1',
        'cart.items[0].originalPrice' => '1.12',
        'cart.items[0].giftMessage' => 'A special message',
        'cart.items[0].description' => 'itemDescription',
        'cart.items[0].quantity' => '14',
        'cart.items[0].shippingInstructions' => 'Some instructions',
        'cart.items[0].shippingMethod' => 'DHL',
        'cart.items[0].shippingTrackingNumber' => '12345678',
        'shipping.street1' => 'Shipstraat 1',
        'shipping.street2' => 'Shipstraat2',
        'shipping.city' => 'Amsterdam',
        'shipping.country' => 'NL',
        'shipping.customer.email' => '[email protected]',
        'shipping.customer.givenName' => 'Wilhelm',
        'shipping.customer.phone' => '00422343978234987',
        'shipping.customer.merchantCustomerId' => 'id123123merchcust',
        'shipping.customer.surname' => 'van Oranje',
        'shipping.customer.middleName' => 'King',
        'shipping.customer.mobile' => '4211113332222',
        'shipping.method' => 'NEXT_DAY_OVERNIGHT',
        'shipping.comment' => 'my shipping comments',
        'shipping.postcode' => '12345',
        'shipping.state' => 'NH',
        'shipping.customer.workPhone' => '0042123123',
        'threeDSecure.verificationId' => 'AAACAgSRBklmQCFgMpEGAAAAAAA=',
        'threeDSecure.eci' => '05',
        'threeDSecure.xid' => 'CAACCVVUlwCXUyhQNlSXAAAAAAA='
    })
    res = http.request(req)
    return JSON.parse(res.body)
end

puts request()
def initialPayment : String = {
    val url = "https://sandbox-card.peachpayments.com/v2/redShield"
    val data = (""
        + "entityId=8a8294174e735d0c014e78cf26461790"
        + "&merchantTransactionId=123412341234"
        + "&amount=92.00"
        + "&currency=EUR"
        + "&paymentBrand=VISA"
        + "&card.number=4200000000000000"
        + "&card.expiryMonth=12"
        + "&card.expiryYear=2027"
        + "&card.holder=Test Holder"
        + "&card.cvv=123"
        + "&billing.street1=Streetwithaverylongnamethatoverflows 1"
        + "&billing.street2=Street 2"
        + "&customer.birthDate=2010-10-10"
        + "&billing.city=Berlin"
        + "&billing.country=DE"
        + "&[email protected]"
        + "&customer.givenName=Test"
        + "&customer.phone=004918912312"
        + "&customer.merchantCustomerId=merchantcustomer.averylong.value.wilgettrimmed"
        + "&customer.ip=123.123.123.123"
        + "&customer.surname=Holder"
        + "&customer.middleName=Kyros"
        + "&customer.mobile=00491231231"
        + "&billing.postcode=80441"
        + "&billing.state=BY"
        + "&customer.workPhone=004978978978"
        + "&descriptor=somedescriptor"
        + "&giftCard.type=BIRTHDAY"
        + "&giftCard.message=Happy Birthday Dareios"
        + "&customer.browserFingerprint.value=browserFingerPrintValueOfShopper"
        + "&customer.status=NEW"
        + "&risk.serviceId=A"
        + "&risk.parameters[USER_DATA1]=custom-defined-value 1"
        + "&risk.parameters[USER_DATA2]=custom-defined-value2"
        + "&risk.parameters[USER_DATA3]=custom-defined-value 3"
        + "&risk.amount=1.12"
        + "&risk.merchantWebsite=www.test.com"
        + "&risk.accountToken=123456"
        + "&risk.brand=VISA"
        + "&cart.items[0].name=myitem"
        + "&cart.items[0].price=1.12"
        + "&cart.items[0].merchantItemId=112345768"
        + "&cart.items[0].sku=mysku1"
        + "&cart.items[0].originalPrice=1.12"
        + "&cart.items[0].giftMessage=A special message"
        + "&cart.items[0].description=itemDescription"
        + "&cart.items[0].quantity=14"
        + "&cart.items[0].shippingInstructions=Some instructions"
        + "&cart.items[0].shippingMethod=DHL"
        + "&cart.items[0].shippingTrackingNumber=12345678"
        + "&shipping.street1=Shipstraat 1"
        + "&shipping.street2=Shipstraat2"
        + "&shipping.city=Amsterdam"
        + "&shipping.country=NL"
        + "&[email protected]"
        + "&shipping.customer.givenName=Wilhelm"
        + "&shipping.customer.phone=00422343978234987"
        + "&shipping.customer.merchantCustomerId=id123123merchcust"
        + "&shipping.customer.surname=van Oranje"
        + "&shipping.customer.middleName=King"
        + "&shipping.customer.mobile=4211113332222"
        + "&shipping.method=NEXT_DAY_OVERNIGHT"
        + "&shipping.comment=my shipping comments"
        + "&shipping.postcode=12345"
        + "&shipping.state=NH"
        + "&shipping.customer.workPhone=0042123123"
        + "&threeDSecure.verificationId=AAACAgSRBklmQCFgMpEGAAAAAAA="
        + "&threeDSecure.eci=05"
        + "&threeDSecure.xid=CAACCVVUlwCXUyhQNlSXAAAAAAA="
    )
    val conn = new URL(url).openConnection()

    conn match {
        case secureConn: HttpsURLConnection  => secureConn.setRequestMethod("POST")
        case _ => throw new ClassCastException
    }
    conn.setDoInput(true)
    conn.setDoOutput(true)
    IOUtils.write(data, conn.getOutputStream())
    conn.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=")
    conn.connect()
    if (conn.getResponseCode() >= 400) {
        return IOUtils.toString(conn.getErrorStream())
    }
    else {
        return IOUtils.toString(conn.getInputStream())
    }
}
Public Function Request() As Dictionary(Of String, Object)
    Dim url As String = "https://sandbox-card.peachpayments.com/v2/redShield"
    Dim data As String = "" +
        "entityId=8a8294174e735d0c014e78cf26461790" +
        "&merchantTransactionId=123412341234" +
        "&amount=92.00" +
        "&currency=EUR" +
        "&paymentBrand=VISA" +
        "&card.number=4200000000000000" +
        "&card.expiryMonth=12" +
        "&card.expiryYear=2027" +
        "&card.holder=Test Holder" +
        "&card.cvv=123" +
        "&billing.street1=Streetwithaverylongnamethatoverflows 1" +
        "&billing.street2=Street 2" +
        "&customer.birthDate=2010-10-10" +
        "&billing.city=Berlin" +
        "&billing.country=DE" +
        "&[email protected]" +
        "&customer.givenName=Test" +
        "&customer.phone=004918912312" +
        "&customer.merchantCustomerId=merchantcustomer.averylong.value.wilgettrimmed" +
        "&customer.ip=123.123.123.123" +
        "&customer.surname=Holder" +
        "&customer.middleName=Kyros" +
        "&customer.mobile=00491231231" +
        "&billing.postcode=80441" +
        "&billing.state=BY" +
        "&customer.workPhone=004978978978" +
        "&descriptor=somedescriptor" +
        "&giftCard.type=BIRTHDAY" +
        "&giftCard.message=Happy Birthday Dareios" +
        "&customer.browserFingerprint.value=browserFingerPrintValueOfShopper" +
        "&customer.status=NEW" +
        "&risk.serviceId=A" +
        "&risk.parameters[USER_DATA1]=custom-defined-value 1" +
        "&risk.parameters[USER_DATA2]=custom-defined-value2" +
        "&risk.parameters[USER_DATA3]=custom-defined-value 3" +
        "&risk.amount=1.12" +
        "&risk.merchantWebsite=www.test.com" +
        "&risk.accountToken=123456" +
        "&risk.brand=VISA" +
        "&cart.items[0].name=myitem" +
        "&cart.items[0].price=1.12" +
        "&cart.items[0].merchantItemId=112345768" +
        "&cart.items[0].sku=mysku1" +
        "&cart.items[0].originalPrice=1.12" +
        "&cart.items[0].giftMessage=A special message" +
        "&cart.items[0].description=itemDescription" +
        "&cart.items[0].quantity=14" +
        "&cart.items[0].shippingInstructions=Some instructions" +
        "&cart.items[0].shippingMethod=DHL" +
        "&cart.items[0].shippingTrackingNumber=12345678" +
        "&shipping.street1=Shipstraat 1" +
        "&shipping.street2=Shipstraat2" +
        "&shipping.city=Amsterdam" +
        "&shipping.country=NL" +
        "&[email protected]" +
        "&shipping.customer.givenName=Wilhelm" +
        "&shipping.customer.phone=00422343978234987" +
        "&shipping.customer.merchantCustomerId=id123123merchcust" +
        "&shipping.customer.surname=van Oranje" +
        "&shipping.customer.middleName=King" +
        "&shipping.customer.mobile=4211113332222" +
        "&shipping.method=NEXT_DAY_OVERNIGHT" +
        "&shipping.comment=my shipping comments" +
        "&shipping.postcode=12345" +
        "&shipping.state=NH" +
        "&shipping.customer.workPhone=0042123123" +
        "&threeDSecure.verificationId=AAACAgSRBklmQCFgMpEGAAAAAAA=" +
        "&threeDSecure.eci=05" +
        "&threeDSecure.xid=CAACCVVUlwCXUyhQNlSXAAAAAAA="

    Dim req As WebRequest = WebRequest.Create(url)
    req.Method = "POST"
        req.Headers.Add("Authorization", "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=")
    req.ContentType = "application/x-www-form-urlencoded"
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(data)
    req.ContentLength = byteArray.Length
    Dim dataStream As Stream = req.GetRequestStream()
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()
    Dim res As WebResponse = req.GetResponse()
    Dim resStream = res.GetResponseStream()
    Dim reader As New StreamReader(resStream)
    Dim response As String = reader.ReadToEnd()
    reader.Close()
    resStream.Close()
    res.Close()
    Dim jss As New System.Web.Script.Serialization.JavaScriptSerializer()
    Dim dict As Dictionary(Of String, Object) = jss.Deserialize(Of Dictionary(Of String, Object))(response)

    Return dict
End Function

responseData = Request()("result")("description")

The response contains the results of the fraud check and echoes the parameters sent in with the request.

Fraud Management as a standalone risk service for stored payment data

You can also perform a Fraud Management scan on already registered payment data against the registration.id as a stand-alone request (that is, without requesting a payment).

https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield

curl https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield \
 -d "entityId=8a8294174e735d0c014e78cf26461790" \
 -d "currency=EUR" \
 -H "Authorization: Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=
public Dictionary<string, dynamic> Request() {
    Dictionary<string, dynamic> responseData;
    string data="entityId=8a8294174e735d0c014e78cf26461790" +
        "&currency=EUR";
    string url = "https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield";
    byte[]  buffer = Encoding.ASCII.GetBytes(data);
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
    request.Method = "POST";
        request.Headers["Authorization"] = "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=";
    request.ContentType = "application/x-www-form-urlencoded";
    Stream PostData = request.GetRequestStream();
    PostData.Write(buffer, 0, buffer.Length);
    PostData.Close();
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        var s = new JavaScriptSerializer();
        responseData = s.Deserialize<Dictionary<string, dynamic>>(reader.ReadToEnd());
        reader.Close();
        dataStream.Close();
    }
    return responseData;
}

responseData = Request()["result"]["description"];
import groovy.json.JsonSlurper

public static String request() {
  def data = "entityId=8a8294174e735d0c014e78cf26461790" +
  "&currency=EUR"
  def url = "https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield".toURL()
  def connection = url.openConnection()
  connection.setRequestMethod("POST")
  connection.setRequestProperty("Authorization","Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=")
  connection.doOutput = true
  connection.outputStream << data
  def json = new JsonSlurper().parseText(connection.inputStream.text)
  json
}
println request()
private String request() throws IOException {
    URL url = new URL("https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield");

    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
        conn.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=");
    conn.setDoInput(true);
    conn.setDoOutput(true);

    String data = ""
        + "entityId=8a8294174e735d0c014e78cf26461790"
        + "&currency=EUR";

    DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
    wr.writeBytes(data);
    wr.flush();
    wr.close();
    int responseCode = conn.getResponseCode();
    InputStream is;

    if (responseCode >= 400) is = conn.getErrorStream();
    else is = conn.getInputStream();

    return IOUtils.toString(is);
}
const https = require('https');
const querystring = require('querystring');

const request = async () => {
    const path='/v1/registrations/{id}/redShield';
    const data = querystring.stringify({
        'entityId':'8a8294174e735d0c014e78cf26461790',
        'currency':'EUR'
    });
    const options = {
        port: 443,
        host: 'sandbox-card.peachpayments.com',
        path: path,
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': data.length,
            'Authorization':'Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ='
        }
    };
    return new Promise((resolve, reject) => {
        const postRequest = https.request(options, function(res) {
            const buf = [];
            res.on('data', chunk => {
                buf.push(Buffer.from(chunk));
            });
            res.on('end', () => {
                const jsonString = Buffer.concat(buf).toString('utf8');
                try {
                    resolve(JSON.parse(jsonString));
                } catch (error) {
                    reject(error);
                }
            });
        });
        postRequest.on('error', reject);
        postRequest.write(data);
        postRequest.end();
    });
};

request().then(console.log).catch(console.error);
function request() {
    $url = "https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield";
    $data = "entityId=8a8294174e735d0c014e78cf26461790" .
                "&currency=EUR";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                   'Authorization:Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ='));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// this should be set to true in production
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $responseData = curl_exec($ch);
    if(curl_errno($ch)) {
        return curl_error($ch);
    }
    curl_close($ch);
    return $responseData;
}
$responseData = request();
try:
    from urllib.parse import urlencode
    from urllib.request import build_opener, Request, HTTPHandler
    from urllib.error import HTTPError, URLError
except ImportError:
    from urllib import urlencode
    from urllib2 import build_opener, Request, HTTPHandler, HTTPError, URLError
import json

def request():
    url = "https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield"
    data = {
        'entityId' : '8a8294174e735d0c014e78cf26461790',
        'currency' : 'EUR'
    }
    try:
        opener = build_opener(HTTPHandler)
        request = Request(url, data=urlencode(data).encode('utf-8'))
        request.add_header('Authorization', 'Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=')
        request.get_method = lambda: 'POST'
        response = opener.open(request)
        return json.loads(response.read());
    except HTTPError as e:
        return json.loads(e.read());
    except URLError as e:
        return e.reason;

responseData = request();
print(responseData);
require 'net/https'
require 'uri'
require 'json'

def request()
    uri = URI('https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield')
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    req = Net::HTTP::Post.new(uri.path)
    req.set_form_data({
        'entityId' => '8a8294174e735d0c014e78cf26461790',
        'currency' => 'EUR'
    })
    res = http.request(req)
    return JSON.parse(res.body)
end

puts request()
def initialPayment : String = {
    val url = "https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield"
    val data = (""
        + "entityId=8a8294174e735d0c014e78cf26461790"
        + "&currency=EUR"
    )
    val conn = new URL(url).openConnection()

    conn match {
        case secureConn: HttpsURLConnection  => secureConn.setRequestMethod("POST")
        case _ => throw new ClassCastException
    }
    conn.setDoInput(true)
    conn.setDoOutput(true)
    IOUtils.write(data, conn.getOutputStream())
    conn.setRequestProperty("Authorization", "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=")
    conn.connect()
    if (conn.getResponseCode() >= 400) {
        return IOUtils.toString(conn.getErrorStream())
    }
    else {
        return IOUtils.toString(conn.getInputStream())
    }
}
Public Function Request() As Dictionary(Of String, Object)
    Dim url As String = "https://sandbox-card.peachpayments.com/v1/registrations/{id}/redShield"
    Dim data As String = "" +
        "entityId=8a8294174e735d0c014e78cf26461790" +
        "&currency=EUR"

    Dim req As WebRequest = WebRequest.Create(url)
    req.Method = "POST"
        req.Headers.Add("Authorization", "Bearer OGE4Mjk0MTc0ZTczNWQwYzAxNGU3OGNmMjY2YjE3OTR8SFV3I3JGQTQ9bWpxaWYrPz9OWVQ=")
    req.ContentType = "application/x-www-form-urlencoded"
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(data)
    req.ContentLength = byteArray.Length
    Dim dataStream As Stream = req.GetRequestStream()
    dataStream.Write(byteArray, 0, byteArray.Length)
    dataStream.Close()
    Dim res As WebResponse = req.GetResponse()
    Dim resStream = res.GetResponseStream()
    Dim reader As New StreamReader(resStream)
    Dim response As String = reader.ReadToEnd()
    reader.Close()
    resStream.Close()
    res.Close()
    Dim jss As New System.Web.Script.Serialization.JavaScriptSerializer()
    Dim dict As Dictionary(Of String, Object) = jss.Deserialize(Of Dictionary(Of String, Object))(response)

    Return dict
End Function

responseData = Request()("result")("description")
{
  "id":"8ac7a4a09d2d4587019d2d836d8f54b0",
  "currency":"EUR",
  "result":{
    "code":"000.300.100",
    "description":"Risk check successful"
  },
  "resultDetails":{
    "RiskFraudDVEHitFlag":"N",
    "RiskFraudStatusCode":"ACCEPT",
    "RiskFraudDVENumHits":"0",
    "EXTERNAL_SYSTEM_LINK":"https://csi-stage.aciondemand.com/mars/en-US/search/transaction/45723487225040901774585081269031",
    "RiskReport":"0100",
    "action":"created",
    "RiskOrderId":"45723487225040901774585081269031",
    "RiskFraudDescription":"Transaction Accepted",
    "TransactionId":"TDwezmA4"
  },
  "buildNumber":"2a7cf1d3d14ccb52500fbcb1ceb7ff4a15b6843b@2026-03-27 00:42:41 +0000",
  "timestamp":"2026-03-27 04:18:01+0000",
  "ndc":"8a8294174e735d0c014e78cf26461790_24ae42542ed54b298ef316738389e504"
}

Fraud Management in combination with a payment request

If a payment is sent and Fraud Management fraud check capabilities are added on top of it, only one request is needed. Based on system configuration, both the risk check and the payment are executed.

In essence, the same request is sent with the same parameters. Only the parameter paymentType must be added compared to a risk-only request. These are the different endpoints that can be used.

As part of a COPYandPAY payment

Depending on where and when the data necessary for the Fraud Management request is collected, the parameters can be sent in an initial call as shown in step 1 of the COPYandPAY checkout to this URL: https://sandbox-card.peachpayments.com/v1/checkouts

As an alternative, send the parameters in a following POST call by referencing the checkout ID received in the response to the first call: https://sandbox-card.peachpayments.com/v1/checkouts/{checkoutId}

As part of a Server-to-Server payment

Using Server-to-Server, send the additional parameters together with the full payment account data from this URL: https://sandbox-card.peachpayments.com/v1/payments

As part of a payment that references a registration

Registrations can be used by sending the payment to this endpoint: https://sandbox-card.peachpayments.com/v1/registrations/{registrationId}/payments

Data already registered is reused and sent to Fraud Management for a risk assessment.

For payment endpoints that are not COPYandPAY or Server-to-Server, Fraud Management must be configured on the entity receiving the request.

Response evaluation for combined payment and risk requests

For a combined payment and risk request, the response still contains only one response code. In the case of a successful risk check and payment, this is one of the success codes.

Anything other than an Accept from Fraud Management could alter the result code to values starting with 100.400. This means the transaction was highlighted by Fraud Management and could warrant further investigation. The payment itself will not have been executed for result codes in the 100.400 group.

Simulate Fraud Management rejection

Simulate three responses from the Fraud Management simulator by passing the following two parameters with the request:

  • customer.givenName=simulate
  • customer.surname, which can be one of the three values listed in the table below
ValueResponse
redDeny by Fraud Management
yellowPayment void and transaction challenged by Fraud Management
errorError on the Fraud Management risk system

Case Manager tieback

If enabled, the tieback feature of Case Manager automatically sends each Approve and Cancel command, and research notes, to a URL (provided by you) to integrate the decision with native systems. Case Manager also allows Administrators to set up Auto Analysts that automatically process transactions, that meet specified criteria, at scheduled times.

The tieback message is sent via HTTP or HTTPS to your web server.

Implementing tieback

Creating the tieback message request

The tieback message request is an HTTP POST message which includes standard headers (ContentLength, Content-Type, Host, Connection, User-Agent, and Expect), optional user-defined headers, and a custom message body. The message body contains transaction-related data that the merchant requests. A typical message body in a tieback request is in the format Client key= Fraud Management value. All key/value pairs are delimited by an ampersand. Keys must be provided. For example, if the key for Transaction ID is TID, this must be shared so the message can be created as expected.

Tieback keys

Tiebacks are standalone requests that need to be mapped to the transaction in the merchant system. An end-to-end ID must be agreed between the merchant and PSP that identifies the transaction in both systems. Configuration of tieback keys is done during the implementation phase together with the implementation manager. For nearly every key that can be sent in a transaction, the associated value can be sent back in tieback. Examples include TransactionID, ClientID, SubClientID, Decision, CancelCode, Notes, ProcessbyUserID, and ProcessDateTime. Custom data can be included, such as username and password. Provide the key/value pair to the account manager and it is appended to the tieback message body as shown (bold) in the example below.

client=000000&subclientid=100001&transactionid=ABC123&acitransactionid=000000100001ABC20160914090137168&decision=CANCEL&userid=ANUser&cancelreason=216&note=lorem+ipsum&processdate=2016-09-14 13:00:00.000&password=NX436T&username=test1

Sample tieback message request

POST /CallbackRequestSvc/v4.0/CallBackRequestService.svc HTTP/1.1
Content-Length: 221
Content-Type: application/x-www-form-urlencoded
Host: qa.redworldwide.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.0 (java 1.5)
Expect: 100-Continue
client=000000&subclientid=100001&transactionid=ABC123&acitransactionid=000000100001ABC20160914090137168&decision=CANCEL&userid=ANUser&cancelreason=216&note=Lorem+ipsum+dolor+sit+amet&processdate=2016-09-14+13%3A00%3A00.0

Sample message content

📘

Not all keys are returned in the message. For example, in the Approve message there is no cancel reason, since the transaction is approved and not cancelled and therefore the cancel reason key is not returned.

  • Approve: client=000000&subclientid=100001&transactionid=ABC123&acitransactionid=000000100001ABC20160914090137168&decision=APPROVE&userid=ANUser&note=Lorem+ipsum+dolor+sit+amet&processdate=2016-09-14 13:00:00.000
  • Cancel: client=000000&subclientid=100001&transactionid=ABC123&acitransactionid=000000100001ABC20160914090137168&decision=CANCEL&userid=ANUser&cancelreason=216&note=Lorem+ipsum+dolor+sit+amet&processdate=2016-09-14 13:00:00.000
  • Pend: client=000000&subclientid=100001&transactionid=ABC123&acitransactionid=000000100001ABC20160914090137168&decision=PENDING&userid=ANUser&note=Lorem+ipsum+dolor+sit+amet&processdate=2016-09-14 13:00:00.000

Response

Respond to a tieback message using HTTP status codes. Populating the HTTP response body is optional.

📘

Any success response should not have the response body populated.

DescriptionHTTP status codeHTTP response body textPass/fail
Success200Pass
Accepted200Pass
Bad Request400Bad RequestFail
Unauthorized401UnauthorizedFail
Forbidden403ForbiddenFail
Not Found404Not FoundFail

Additional HTTP codes can be used.

Configuration

To set up tieback, the merchant needs to do the following:

  • Provide a destination URL that can receive HTTP or HTTPS POST messages.
📘

Up to three URLs can be provided but only one can be active at a time. If a non-standard port (80 for HTTP or 443 for HTTPS) needs to be used, provide the IP address and port.

  • Ensure the Content-Type header is set to application/x-www-form-urlencoded
  • Provide the optional tieback header to send in the POST message
📘

You receive all standard headers in addition to these user-defined headers.

  • Communicate which keys (fields) to pass in the tieback request
  • Provide the time in minutes (up to 5) before retrying a failed tieback message, and the number of retries (up to 5)
  • Provide a list of HTTP responses that return

Tieback testing

For initial testing, use HTTP so that messages are not encrypted and you can inspect content during troubleshooting. Once testing confirms the connection and message flow are successful and correct, change to HTTPS.

When ready to test tieback, an Analyst must process a Case Manager transaction.

To process a Case Manager transaction: Choose the Actions area, use the Pend or Cancel options to act on a transaction, or click Approve.

  • If the transaction should be pending, either leave the default date and time shown or use the calendar picker and time drop-down menu to select a date and time. The time zone controls the pend time. Customer Services recalculates the server time to the time zone and adds the pend time. Click the Go button. Customer Services moves the transaction to the appropriate place in the queue based on the specified date and time.
  • To cancel the transaction, select a reason for cancellation, and click the Go button. Customer Services removes the transaction from all queues.
  • Alternatively, click Approve to accept the transaction and release it from its holding state. The Transaction Details page for the next transaction in the queue opens automatically.

When the transaction processes, the system immediately sends a tieback request (via HTTP POST) to a web server via a URL. The tieback message passes the keys and values requested. Then the system sends a response message indicating success or failure.

Customer Services waits for a response from the web server for each tieback message. If the tieback fails, the Client Administrator can view and resubmit the failed tieback from the Failed Tiebacks window.

Failed tiebacks

Customer Services sends transaction information to a web server when an Analyst approves or cancels a transaction. When the web server receives the information, you can access the transaction information to integrate with other native systems. The web server also generates a message and response code and sends it back to Customer Services.

When a failure occurs, Customer Services is not able to deposit the transaction information to the web server location. Customer Services attempts to send the transaction information to the web server several times before considering the data exchange a true failure.

Once Customer Services exhausts all attempts, the transaction appears in the Failed Tiebacks list. The Client Administrator can resubmit the tieback for a one-time attempt. If the tieback fails again, it reappears on the Failed Tieback list. Alternatively, the Client Administrator can delete the tieback from the list.

To resubmit a tieback message, go to the failure list: Setup > View my list of queues > Failed Tiebacks

Select the transaction from the list by using the check box and then click Resubmit.