Cashflows Gateway Quick Start

This page will cover the basics of integrating with the Cashflows Gateway API. For more in-depth documentation see the Cashflows Gateway guide. For advanced integrations or more technical solutions, see our API References.

Other integration options

There’s a Remote Authentication page if you want to focus on the verification and authorization of transactions remotely. We also have a plug-in for WooCommerce. If you’re a partner, we also have a Cashflows for Partners page dedicated to using Cashflows as a partner.

If you’d rather not handle payments directly, you can use the Hosted Payment Page (HPP). With Hosted Payment Pages you set up through the Cashflows Portal, just configure your branding, then link it to your application.

Hosted Payment Pages support these payment methods:
  • Visa

  • Mastercard

  • American Express

  • ApplePay (Digital wallet)

  • GooglePay (Digital wallet)

  • Click to Pay (Digital wallet)

  • PayPal (Digital wallet)

There’s also an Embedded Checkout guide if you’d like to blend your website and checkout pages.

Embedded Checkout supports these payment methods:
  • Visa

  • Mastercard

  • American Express

  • ApplePay (Digital wallet)

  • GooglePay (Digital wallet)

Setup

This section will cover actions you need to do, or information you need to collect, before integrating with Cashflows.

Sensitive data and PCI-DSS

The storage of Sensitive Authentication Data (track data and/or CVV2) post-authorisation is prohibited by Visa and Mastercard, as well as Requirement 3 of the Payment Card Industry Data Security Standard (PCI-DSS).

If you handle card data you need to demonstrate your systems handle this data securely and that you take full responsibility for your PCI compliance. This includes, but is not limited to, providing your current Attestation of Compliance certificate and evidence of a recent clean vulnerability scan.

A list of approved Security Assessors can be found at: https://www.pcisecuritystandards.org/assessors_and_solutions/qualified_security_assessors.

Prerequisites

Before integrating you’ll need:

You need different credentials for the integration and production environments, to create an integration account for testing purposes contact implementations@cashflows.com.

User permissions

Before integrating you need to have access to Cashflows Portal. You’ll need the Owner or External Developer user role to access the required pages. If you don’t have access to any of the pages mentioned below, contact your administrator to check your user permissions. If you have not yet set up a Cashflows account, contact us now.

API credentials

To integrate with Cashflows you’ll first need to collect your API credentials:

  • Configuration ID - unique identifier for your account included in API messages

  • Current API key - the key for encrypting API messages sent to us

To retrieve your credentials:

  1. Sign into Cashflows Portal and select Configuration from the menu.

  2. Select the API Data tab, the API Data page displays your API configuration details:

    ../_images/gateway_api_data.PNG

If you need to generate a new API key this can be done from the API Data tab:

  1. Select Generate a new API key to generate a new key.

  2. Wherever your integration uses the API key, replace the old key with the new one.

  3. When you have successfully updated all API key references, check the confirmation box and select Update API Key:

    ../_images/gateway_update_api_key.PNG

Generate your signature

As with all API calls you will need to send a request signature with any requests.

To ensure server to server messages have been issued by valid users, request messages must be signed. The signature field is a SHA2-512 hash calculated by concatenating your API key with a string of the request object. If you don’t have your API key please contact your Implementation Manager.

If the signature is incorrect, an error will be returned. Repeated failures will lock your account, if this happens, please contact your Implementation Manager.

SHA2-512 hash of your request. To generate your hash, concatenate the message body of your request to the API key to give one long string.

Warning

Whitespace and new lines in the request object are included in the hash calculation. We use CR-LF for line breaks, however Unix systems often use just LF, and this can affect calculations. If you can’t match signatures but have the correct password hash, remove unnecessary whitespace from your Request nodes.

After applying a SHA2-512 hash, the concatenated string would look like:

3CDF192F6AC67E3A491EF2B60EA9A03C6B408056CE19C3BBC307EB06A4CE1F4081B8D 021B1E9760E7CC18EED479EDBAFF926DADC2953B5F8B25717B8D5CB7609

Finally, add the generated key as the Signature value in your request:

{
    "ApiKey": "12345678-ABCD-ABCD-ABCD-12345678ABCD",
    "Signature": "3CDF192F6AC67E3A491EF2B60EA9A03C6B408056CE19C3BBC307EB06A4CE1F4081B8D021B1E9760E7CC18EED479EDBAFF926DADC2953B5F8B25717B8D5CB7609",
    "Request": {
        "type": "Payment",
        "paymentMethodsToUse": ["creditcard"],
        "parameters": {
            "cardNumber":"4000000000000002",
            "cardCvc": "123",
            "cardExpiryMonth": "05",
            "cardExpiryYear": "23"
        },
        "order": {
            "orderNumber": "Payment ref D1"
        },
        "currency": "GBP",
        "amountToCollect": "10.00"
    },
}

Return URLs

After processing ecommerce payments, customers are directed back to your website based on if their payment succeeded or failed. If you don’t want to us our default pages and are using hosted payment pages, you can override the default pages. For more information, see the Hosted Payment Pages page.

If you choose to display your own webpages, you need to set the addresses (return URLs) of the pages you want us to display.

For recurring payments, you don’t need to set up any return URLs. You can specify a different page for each of the following scenarios:

  • Success - A customer completes a transaction successfully.

  • Failed - A customer fails to complete the payment process, enabling you to display a page explaining what might have happened and give the customer the opportunity to try again.

Tip

For security reasons, we recommend that you update orders only after receiving the payment status notification from us.

To tell us which pages to display:

  1. Sign into Cashflows Portal and select Configuration from the menu

  2. Select the API Data tab

  3. Select Edit API Data then add the address (URL) for each page that you would like to display for example:

    ../_images/gateway_return_urls.PNG
  4. Select Save.

Payment status updates

After processing a payment, we need to communicate any changes to the status, for example from Pending to Paid, to your website. We use webhooks for this, so you don’t need to check for changes in payment status if you tell us where to send notification webhooks.

To tell us where to send notification webhooks:

  1. Sign into Cashflows Portal and select Configuration from the menu

  2. Select the API Data tab, then select Edit API Data

  3. In the Notification section, add the Notification URL, this is the address we send notification webhooks. For example:

    ../_images/gateway_notification_url.PNG
  4. In the Notification section, add the Notification email address, this is the address we send notifications about undelivered webhooks or incorrect:

    ../_images/gateway_notification_email.PNG

Gateway webhook notifications are sent from these two IP address: 54.74.58.255 and 52.215.48.101. Depending on your firewall settings, you may wish to whitelist them, as well as Ireland in your Geolocation settings.

Payment requests

So that we can process an online payment, your website needs to send an API payment request to our online payment servers to initiate the transaction.

The process for submitting a payment request involves:

  1. Creating a payment job

  2. Receiving the payment job details response

  3. Capturing the payments

The payment job is a server-to-server call from your server to ours, confirmed with a returned 201 - Payment job created successfully response if successful.

The response specifies payment and order information plus a link (action URL) to determine the next stage of the payment processing.

Creating a payment job

To create a payment job, you must provide a payment job request containing the mandatory required fields. When establishing and testing connectivity, it’s good enough to provide only the mandatory information.

However, to help you track payments, we recommend providing additional optional fields as well when fully integrating. As a minimum, consider including:

  • Payment amount (mandatory)

  • Currency

  • Order reference (the reference that you generate)

  • Customer name

  • Customer email

Payment job requests are sent to:

  • Integration - https://gateway-int.cashflows.com/api/gateway/payment-jobs

  • Production - https://gateway.cashflows.com/api/gateway/payment-jobs

To create a payment job:

In the request header, provide your configuration ID and a SHA2-512 hash of your request. To generate your hash, concatenate the message body of your request to the API key to give one long string.

For example, to use an API key like this:

845c51f6-1cd5-4338-a586-df752e65d690

And to submit to the following fields and values:

amountToCollect": "10.00", "currency": "GBP", "locale": "en_GB"

You would create this string:

845c51f6-1cd5-4338-a586-df752e65d690{"amountToCollect": "10.00", "currency": "GBP", "locale": "en_GB" }

After applying a SHA2-512 hash the concatenated string would look like:

3CDF192F6AC67E3A491EF2B60EA9A03C6B408056CE19C3BBC307EB06A4CE1F4081B8D 021B1E9760E7CC18EED479EDBAFF926DADC2953B5F8B25717B8D5CB7609

Important

Every field and value that you send, and every parenthesis, must be included in the hash.

The resulting headers must match the format of this example:

ConfigurationId:201226100000131072 Hash:3CDF192F6AC67E3A491EF2B60EA9A03C6B408056CE19C3BBC307EB06A4CE1F40
81B8D021B1E9760E7CC18EED479EDBAFF926DADC2953B5F8B25717B8D5CB7609

Example payment job request

import requests
import json

# Define the API endpoint
url = "https://gateway-inta.cashflows.com/api/gateway/payment-jobs"

# Define the payload (data to send with the request)
payload = json.dumps({
    "amountToCollect": "15.50",
    "currency": "GBP"
})

# Define the headers
headers = {
    'Hash': 'YOUR_CONFIGURATION_ID',
    'ConfigurationId': 'YOUR_CONFIGURATION_ID',
    'Content-Type': 'application/json'
}

# Send the POST request to the API
response = requests.post(url, headers=headers, data=payload)

# Print the response text (or handle it as needed)
if response.status_code == 200:
    print("Request was successful!")
    print("Response: ", response.json())  # Assuming the server returns JSON data
else:
    print(f"Request failed with status code {response.status_code}")
    print("Response Text: ", response.text)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpHeaders;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        String url = "https://gateway-inta.cashflows.com/api/gateway/payment-jobs";

        String payload = "{ \"amountToCollect\": \"15.50\", \"currency\": \"GBP\" }";

        // Setting the headers
        Map<String, String> headers = new HashMap<>();
        headers.put("Hash", "YOUR_SIGNATURE_HASH");
        headers.put("ConfigurationId", "YOUR_CONFIGURATION_ID");
        headers.put("Content-Type", "application/json");

        // Create HTTP client
        HttpClient client = HttpClient.newHttpClient();

        // Build the HTTP request
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(url))
            .header("Hash", headers.get("Hash"))
            .header("ConfigurationId", headers.get("ConfigurationId"))
            .header("Content-Type", headers.get("Content-Type"))
            .POST(HttpRequest.BodyPublishers.ofString(payload))
            .build();

        // Send the request and get the response
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        // Print the response
        System.out.println(response.body());
    }
}
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var url = "https://gateway-inta.cashflows.com/api/gateway/payment-jobs";
        var payload = "{\"amountToCollect\": \"15.50\", \"currency\": \"GBP\"}";

        var client = new HttpClient();

        // Setting the headers
        client.DefaultRequestHeaders.Add("Hash", "YOUR_SIGNATURE_HASH");
        client.DefaultRequestHeaders.Add("ConfigurationId", "YOUR_CONFIGURATION_ID");

        var content = new StringContent(payload, Encoding.UTF8, "application/json");

        // Sending the POST request
        var response = await client.PostAsync(url, content);

        // Reading and printing the response
        var responseContent = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseContent);
    }
}
const axios = require('axios');

const url = 'https://gateway-inta.cashflows.com/api/gateway/payment-jobs';
const payload = {
amountToCollect: "15.50",
currency: "GBP"
};

const headers = {
'Hash': 'YOUR_SIGNATURE_HASH',
'ConfigurationId': 'YOUR_CONFIGURATION_ID',
'Content-Type': 'application/json'
};

axios.post(url, payload, { headers })
.then(response => {
    console.log(response.data);
})
.catch(error => {
    console.error('Error:', error.response ? error.response.data : error.message);
});
<?php

$url = 'https://gateway-inta.cashflows.com/api/gateway/payment-jobs';
$data = array(
    'amountToCollect' => '15.50',
    'currency' => 'GBP'
);

// Convert data array to JSON
$jsonData = json_encode($data);

// Set headers
$headers = array(
    'Hash: YOUR_SIGNATURE_HASH',
    'ConfigurationId: YOUR_CONFIGURATION_ID',
    'Content-Type: application/json'
);

// Initialize cURL session
$ch = curl_init($url);

// Set cURL options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);

// Execute the request
$response = curl_exec($ch);

// Check for errors
if(curl_errno($ch)) {
    echo 'cURL Error: ' . curl_error($ch);
} else {
    echo $response; // Print the response
}

// Close the cURL session
curl_close($ch);

?>
require 'net/http'
require 'json'
require 'uri'

# URL for the API endpoint
url = URI.parse('https://gateway-inta.cashflows.com/api/gateway/payment-jobs')

# Payload (data to be sent)
payload = {
amountToCollect: "15.50",
currency: "GBP"
}.to_json

# Headers
headers = {
'Hash' => 'YOUR_SIGNATURE_HASH',
'ConfigurationId' => 'YOUR_CONFIGURATION_ID',
'Content-Type' => 'application/json'
}

# Create a new HTTP request
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url.path, headers)
request.body = payload

# Send the request and get the response
begin
response = http.request(request)

# Print the response body
puts response.body
rescue StandardError => e
# Print error message if request fails
puts "Error: #{e.message}"
end

Example payment job message body

Sent with: POST https://gateway-int.cashflows.com/api/gateway/payment-jobs

{
    "type": "Payment",
    "paymentMethodsToUse": ["creditcard"],
    "parameters": {
        "cardNumber":"4000000000000002",
        "cardCvc": "123",
        "cardExpiryMonth": "05",
        "cardExpiryYear": "23"
    },
    "order": {
        "orderNumber": "Payment ref D1"
    },
    "currency": "GBP",
    "amountToCollect": "10.00"
}

Payment job fields

Field

Description

Mandatory/Optional

amountToCollect

The total value of the payment transaction.

Mandatory

currency

The transaction currency

Mandatory

cardHolderName

The name of the customer. Required for transactions that need to have 3DS checks applied. A request without a cardholderName, will result in an error response

Mandatory

orderNumber

The order number address of the customer.

Optional

customerEmail

The email address of the customer.

Optional

locale

Determines the language that messages are displayed in. For example, to set the language to English, use the locale en-GB. Other options are:


  • el_GR (Greek)

  • en_US (US English)

  • nl_NL (Dutch)

  • es_ES (Spanish)


If your language is not available, please choose the most appropriate language for your customers.

Optional

Including optional customer and delivery details enables us to display the information in Cashflows Portal, for example in the transaction details and reports, making it easier for you to locate and reconcile payments.

Payment job response

When you send a payment job request you’ll receive back a response that includes a link (action URL), usually a link to the 3D Secure page for card payments. This is the link that you need to use to redirect the customer so that they enter their 3D Secure details. As soon as we have those details, we can process the payment.

To receive the response

For a card payment, extract the link (action URL) and use it to take you to the integration environment 3D Secure simulation page.

Our 3D Secure simulator provides options for you to simulate different scenarios so that you can test, for example, whether a transaction passes or fails 3D Secure checks.

Response codes

After you’ve submitted a request to create a payment job, the Gateway API responds with a code:

Code

Description

201

Payment job created successfully

400

Request contains errors

401

Invalid token

403

Insufficient permissions

404

Configuration not found

406

Bad response

Example response

Here is an example of the full response from a 201, payment job created successfully response:

Click to expand example
{
    "data": {
        "reference": "210221017179873304",
        "createDateTimeUtc": "2021-02-18T11:04:38.2907414Z",
        "type": "Payment",
        "traceReference": "210220121768573008",
        "configurationId": "200426117314086912",
        "domain": "cashflows.com",
        "locale": "en_GB",
        "timeZone": "Europe/London",
        "order": {
            "orderNumber": "Payment ref D1",
            "createDateTimeUtc": "2021-02-18T11:04:38.2907443Z",
            "orderLines": []
        },
        "orderHistory": [],
        "paymentMethodsToUse": [
            "Card"
        ],
        "currency": "GBP",
        "amountToCollect": "10.00",
        "expirationDateTimeUtc": "2021-08-18T11:04:38.2907396Z",
        "dueDateTimeUtc": "2021-02-18T11:14:38.8761894Z",
        "lastUpdateTimeUtc": "2021-02-18T11:04:38.2907435Z",
        "lastProcessedTimeUtc": "2021-02-18T11:04:38.2907426Z",
        "flags": {
            "direct": true
        },
        "attributes": {},
        "paymentStatus": "Pending",
        "payments": [
            {
                "reference": "210221117314091036",
                "createDateTimeUtc": "2021-02-18T11:04:38.4842538Z",
                "paymentMethods": [
                    "Card"
                ],
                "status": "Pending",
                "amountToCollect": "10.00",
                "surchargeAmount": "0",
                "steps": [
                    {
                        "reference": "210221204311744516",
                        "createDateTimeUtc": "2021-02-18T11:04:38.8763717Z",
                        "action": "Start",
                        "paymentMethods": [
                        "Card"
                        ],
                        "status": "Pending",
                        "amountToCollect": "10.00"
                    }
                ],
                "flags": {},
                "attributes": {
                    "returnUrlSuccess": "https://www.mywebshop.com/?paymentjobref=210221017179873304&paymentref=210221117314091036&ordernumber=Payment+ref+D1",
                    "returnUrlFailed": "https://www.mywebshop.com/?paymentjobref=210221017179873304&paymentref=210221117314091036&ordernumber=Payment+ref+D1",
                    "returnUrlCancelled": "https://www.mywebshop.com?paymentjobref=210221017179873304&paymentref=210221117314091036&ordernumber=Payment+ref+D1&status=cancelled",
                    "cashFlowsAcquiringDetails": "{\"ThreeDSecureVersion\":\"1.0.2\",\"ThreeDSecureVersionReason\":\"3D Secure v2 not enabled for this merchant.\"}"
                },
                "refunds": [],
                "captures": []
            }
        ]
    },
        "links": {
            "data": {
                "url": "https://gateway-int.cashflows.com/api/gateway/paymentjobs/210221017179873304",
                "type": "application/json"
            },
            "action": {
                "url": "https://gateway-int.cashflows.com/payment/formpost?ref=4ab07d818100e4880130c8e35d25ea1bc381fe26d5ff52c0c5692920446c747de8a6e94459bc22b5184f86645f275caa21e76555ba0c111cc55412948a453b6e",
                "type": "text/html"
            },
            "documentation": {
                "url": "https://gateway-int.cashflows.com/payment-gatewayapi/documentation/index.html",
                "type": "text/html"
            }
        }
    }
}

Capture requests

You need to capture payment requests following authorisation of payments.

By default, Cashflows will automatically capture transactions for you. This section will cover how to disable, then manually capture transactions. If you do not wish to manually capture transactions, proceed to the next section.

Manually capture transactions

If you want to disable automatic capture requests you must:

  1. Disable Auto Capture in Cashflows Portal.

  2. Create a capture request with an API call within seven days.

Warning

If you don’t send the capture request within seven days, there is no guarantee that the customer will still have the funds in their account and so you may not receive payment.

Disable automatic capture

The steps that follow apply to all transactions. If you want to defer capture for an individual payment, you need to use create a capture request with an API call.

  1. Sign into Cashflows Portal.

  2. From the Cashflows Portal menu, select Configuration.

  3. Select Payment Methods.

  4. Select Enabled to display the card settings.

  5. Clear the Auto Capture check box.

  6. Select Save.

Create a capture request

If you disable Auto Capture, we send an authorisation request to reserve funds on the card, but the payment will not be completed. To complete the payment, you need to issue a separate capture request within seven days using an API call through the Cashflows Gateway.

Example request

Sent to: ./gateway/payment-jobs/{paymentJobReference}/payments/{paymentReference}/captures

{
    "amountToCapture": "10",
    "isFinalCapture": "true"
}

Example response

{
    "data": {
        "reference": "210123500033554432",
        "createDateTimeUtc": "2021-01-14T15:18:27.1360974Z",
        "status": "Completed",
        "amountToCapture": "10",
        "isFinalCapture": true,
        "attributes": {
            "paymentMethodTransactionId": "01S00D76D1A"
        }
    }
}

Required fields

Field

Description

Mandatory/Optional

paymentJobReference

The reference of the payment job to capture.

Mandatory

paymentReference

The reference of the payment to create a capture for.

Mandatory

configurationId

Your configuration ID.

Mandatory

hash

A hexadecimal sha512 hash of your password plus the body.

Mandatory

locale

Determines the language that messages are displayed in. For example, to set the language to English, use the locale en-GB. Other options are:


  • el_GR (Greek)

  • en_US (US English)

  • nl_NL (Dutch)

  • es_ES (Spanish)


Tip: If your language is not available, please choose the most appropriate language for your customers.

Optional

Response codes

Code

Description

200

Payment or payment job successfully cancelled.

400

Request contains errors.

401

Invalid token.

403

Insufficient permissions.

404

Configuration or payment job or payment not found.

406

Bad response.

Testing your integration

To enable you to test your integration before going live, we have an integration environment where you can simulate different payment scenarios.

To test, send payments to https://secure-int.cashflows.com/gateway/.

Important

You need different credentials for the integration and production environments, to create an integration account for testing purposes contact implementations@cashflows.com.

If you enter some test card details and select Pay with card …, you’ll see our 3D Secure simulation page.

Example: Simulating a Payment Request

{
  "type": "Payment",
  "paymentMethodsToUse": ["creditcard"],
  "parameters": {
    "cardNumber": "4111111111111111",
    "cardCvc": "123",
    "cardExpiryMonth": "06",
    "cardExpiryYear": "25",
    "cardHolderName": "Jane Doe"
  },
  "order": {
    "orderNumber": "TestPayment1"
  },
  "currency": "USD",
  "amountToCollect": "50.00"
}

Test cards

If you are testing card payments, you need to use a valid card number. Here are some test card numbers that you can use:

Click to show test cards

Test cards

cardNumber value

Card Type

CVC

Expiry date

4510400400099005

Visa

123

Any future date within 10 years

4510500400099002

Visa

123

Any future date within 10 years

4510800400099006

Visa

123

Any future date within 10 years

4000000000000002

Visa

123

Any future date within 10 years

5400100400099001

Mastercard

123

Any future date within 10 years

5400200400099009

Mastercard

123

Any future date within 10 years

5400300400099007

Mastercard

123

Any future date within 10 years

340000000000009

American Express

1234

Any future date within 10 years

Cardholder name

You can use specific values as the cardHolderName to trigger specific results for the test transaction:

cardHolderName value

Response

Luke Skywalker

Success response

Han Solo

Challenge response

Leia Skywalker

Decoupled challenge

Lando Calrissian

Not authenticated

Darth Maul

Not authenticated (with proof of authentication)

Darth Vader

Failed for technical reasons

Ben Kenobi

Rejected by issuer

Left blank

Failed response

Using our 3D Secure simulator

Our 3D Secure simulator provides options for you to simulate different scenarios so that you can test, for example, whether a transaction passes or fails 3D Secure checks.

  • Authentication successful - simulates a payment successfully passing all 3D Secure checks and proceeds to the authorisation status.

  • Authentication failed - simulates a customer incorrectly completing 3D Secure checks and proceeds to the declined status.

  • Authentication unavailable - simulates a card issuer’s system being unavailable, depends on how the gateway is configured in Cashflows Portal.

  • Authentication attempted - simulates the scenario where the 3D Secure system is available, but the card has not been enrolled for 3D Secure. The payment proceeds to the authorisation status.

Complete test scenarios

If your account has not already been set live then we need to see that you’ve successful tested.

The test requirements are based on the types of transactions that you’ll be processing. Based on what you told us during onboarding we will send you an accreditation spreadsheet with a list of test scenarios you need to run through. For example:


../_images/gateway_test_scenarios.PNG

To confirm your test scenarios:

  • Save the accreditation spreadsheet locally and open it.

  • In the Payment Type column, enter the card type, for example: Debit or Credit.

  • In the Payment Solution column, enter one of the options at the top such as:
    • Visa

    • Mastercard in full or abbreviated to MC

  • In the Test Result column, type Y, Yes, or Passed to confirm a successful test result.

  • In the Payment Job Number column, type the number of the payment job that was used to test the payment scenario. We can then check whether the test was successful or not.

    Important

    To prevent the payment job number from being treated like a number and rounded up, insert an apostrophe before the payment job number and do not include any spaces.

  • If you have completed any live testing, complete the Live columns:
    • In the Live Result column, type Y, Yes, or Passed to confirm successful live testing before release to customers.

    • In the Live Payment Job Number column, type the number of the payment job that was used for live testing.

  • In the Notes column, add any extra information that can be useful. For example, for a recurring payment, please provide the parent job number.

  • Send your completed list of accreditation tests to implementations@cashflows.com.

This lets us know what you intend to test and enables us to check that you are correctly set up for the transactions that you’re planning. We send you an accreditation confirmation to let you know that we’re happy for you to go live.

Going live

Before you can connect to our production environment for going live, you need:

  • A production account

  • Sign-in credentials

We provide these when your account has been approved. If you have not received these, email implementations@cashflows.com.

Important

You need different credentials for the production environment. You can’t use your integration account credentials.

When you are satisfied that your integration is complete and working you can start processing live transactions by switching from the integration environment to the production environment.

To make the switch, change your:

  • Configuration ID

  • API key

  • The URLs that point to the environments where you send your API messages

This means that you need to change the integration (test) URL from https://gateway-int.cashflows.com to https://gateway.cashflows.com for the production environment.

Additional resources

For additional information, see the:

Contact and Support

If you need additional support please contact one of the below teams. Phone lines are open Monday to Friday between 09:00 and 17:00 UTC.

Application and account setup

For information relating to your application or technical implementation, please use the contact details below:

Account support

To assist you in your day-to-day running of your account, please use the contact details below: