Account funding transaction checkouts

Charge a account funding transaction with the iframe checkout on your website

Learn how to perform an account funding transaction where you do not save the customer's card for future use. Or perform an account funding transaction where you save the customer's card to use in a one-click checkout.


1. Create the checkout in the payment gateway

The first step is to perform a POST request to the payment gateway to create a checkout, with the payment type, amount, currency, and required attributes.

Here is an example request to create a checkout for an account funding transaction.

curl https://eu-test.oppwa.com/v1/checkouts \
-H "Accept: application/json" \
-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
-d "entityId={channelId}" \
-d "amount=20.00" \
-d "currency=EUR" \
-d "paymentType=DB" \
-d "integrity=true" \
-d "merchantTransactionId=P123" \
-d "billing.street1=Grillparzerstr 18" \
-d "billing.city=Munich" \
-d "billing.country=DE" \
-d "billing.postcode=81675" \
-d "[email protected]" \
-d "customer.ip=2001:8a0:7f4b:1b00:dd4e:2bf6:1fb8:56af" \
-d "customer.givenName=John" \
-d "customer.surname=Smith" \
-d "customer.phone=34667666666" \
-d "customer.merchantCustomerId=CUST01" \
-d "merchant.city=Vancouver" \
-d "recipient.givenName=Jane" \
-d "recipient.surname=Smith" \
-d "recipient.state=QC" \
-d "recipient.country=CAN" \
-d "recipient.accountNumberType=RTN_AND_BANK_ACCOUNT" \
-d "recipient.accountNumber=1234567890" \
-d "recipient.birthDate=1985-01-01" \
-d "recipient.phone=0123456789" \
-d "customParameters[TransactionTypeIdentifier]=F07" \
-d "customParameters[DateOfFunds]=250901" \
-d "customParameters[AdditionalTrace]=ABC123" \
-d "customParameters[CreditSenderName]=John Smith" \
-d "customParameters[CreditSenderAddress]=Grillparzerstr 18|Munich|BAV|DEU|81675" \
-d "customParameters[CreditSenderCity]=Munich" \
-d "customParameters[CreditSenderState]=BAV" \
-d "customParameters[CreditSenderCountry]=DEU" \
-d "threeDSecure.challengeIndicator=04" \
-d "customParameters[CRMCustomerID]=CUST01" \
-d "customParameters[OrderID]=SP-00100" \
-d "customParameters[PaymentType]=AFT" \
-d "customParameters[3DS2_enrolled]=true" \
-d "customParameters[3DS2_flow]=challenge" \  
-d "testMode=EXTERNAL" \
-H "Authorization: Bearer {auth_token}"
curl https://eu-test.oppwa.com/v1/checkouts \
-H "Accept: application/json" \
-H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
-d "entityId={channelId}" \
-d "amount=20.00" \
-d "currency=EUR" \
-d "paymentType=DB" \
-d "integrity=true" \
-d "merchantTransactionId=P123" \
-d "billing.street1=Grillparzerstr 18" \
-d "billing.city=Munich" \
-d "billing.country=DE" \
-d "billing.postcode=81675" \
-d "[email protected]" \
-d "customer.ip=2001:8a0:7f4b:1b00:dd4e:2bf6:1fb8:56af" \
-d "customer.givenName=John" \
-d "customer.surname=Smith" \
-d "customer.phone=34667666666" \
-d "customer.merchantCustomerId=CUST01" \
-d "merchant.city=Vancouver" \
-d "recipient.givenName=Jane" \
-d "recipient.surname=Smith" \
-d "recipient.state=QC" \
-d "recipient.country=CAN" \
-d "recipient.accountNumberType=RTN_AND_BANK_ACCOUNT" \
-d "recipient.accountNumber=1234567890" \
-d "recipient.birthDate=1985-01-01" \
-d "recipient.phone=0123456789" \
-d "customParameters[TransactionTypeIdentifier]=F07" \
-d "customParameters[DateOfFunds]=250901" \
-d "customParameters[AdditionalTrace]=ABC123" \
-d "customParameters[CreditSenderName]=John Smith" \
-d "customParameters[CreditSenderAddress]=Grillparzerstr 18|Munich|BAV|DEU|81675" \
-d "customParameters[CreditSenderCity]=Munich" \
-d "customParameters[CreditSenderState]=BAV" \
-d "customParameters[CreditSenderCountry]=DEU" \
-d "threeDSecure.challengeIndicator=04" \
-d "customParameters[CRMCustomerID]=CUST01" \
-d "customParameters[OrderID]=SP-00100" \
-d "customParameters[PaymentType]=AFT" \
-d "standingInstruction.type=UNSCHEDULED" \
-d "standingInstruction.mode=INITIAL" \
-d "standingInstruction.source=CIT" \  
-d "createRegistration=true" \
-d "customParameters[3DS2_enrolled]=true" \
-d "customParameters[3DS2_flow]=challenge" \  
-d "testMode=EXTERNAL" \
-H "Authorization: Bearer {auth_token}"

Replace the example values with your values and replace the {channelId} and {auth_token} with your API credentials.

Here is a table with information about the parameters in this request.


Account funding transaction request parameters table

This table includes the parameters for the iframe checkout and the account funding transaction parameters required by the Card Schemes.

KeyExample ValueValue Format / OptionsMandatory
entityId{channelId}AN32Yes
amount100.00N10.N2Yes
currencyEURA3Yes
paymentBrandMASTERVISA, MASTER, and so on, as in Gateway documentationYes
paymentTypeDBDB debit or PA preauthorisation. For PA use the back office API to capture the amount.Yes
integritytrueBoolean, checkout securityYes
merchantTransactionIdABC123AN..255Recommended
billing addressYes for 3DS
customer detailsRecommended
merchant.cityVancouverANS13Yes
recipient.givenNameJaneAN48Yes
recipient.surnameSmithAN48Yes
recipient.stateQCANS..3Mandatory for: Mastercard Send Funding to US and Canada
recipient.countryCANA3Mandatory for: Mastercard Send Funding to US and Canada
recipient.street123 Street RoadANS..25Mandatory for: Mastercard Send Funding to US and Canada
recipient.cityVancouverANS..15Mandatory for: Mastercard Send Funding to US and Canada
recipient.postcodeL4J 1V1ANS..10Mandatory for: Mastercard Send Funding to US and Canada
recipient.
accountNumberType
RTNAND
BANK_ACCOUNT
Indicates type of recipient's account. Possible values are: OTHER RTN_AND_BANK_ACCOUNT IBAN EMAIL PHONE_NUMBER BAN_AND_BIC WALLET_ID SOCIAL_NETWORK_IDYes
recipient.
accountNumber
1234567890ANS..50Yes
customParameters[
TransactionTypeIdentifier]
F64Possible values are:
F07 - Funding General Person to Person Transfer
F08 - Funding Person to Person Transfer to Card Account
F52 - Funding General Transfer to Own Account
F54 - Funding Payment of Own Credit Card Bill
F61 - Funding Transfer to Own Staged Digital Wallet Account
F64 - Funding Transfer to Own Debit or Prepaid Card Account
Mandatory for: Mastercard Send Funding transactions
customParameters[
CreditSenderName]
John SmithAN..30Yes
customParameters[
CreditSenderAddress]
Grillparzerstr 18|Munich|
BAV|DEU|81675
AN.. 35
Street|City|StateCode(US Only)|ISO3166 CountryCode|PostalCode
Yes
customParameters[
CreditSenderCity]
MunichAN..25Yes
customParameters[
CreditSenderState]
BAVAN3Yes
customParameters[
CreditSenderCountry]
DEUAN3Yes
threeDSecure.
challengeIndicator
The recommended value is 04.Yes in UK and EEA
customParametersWe recommend adding custom parameters to uniquely identify the customer, order, and purchase type. The custom data you send in these parameters will be returned in the payment response. .You can use these parameters to pair and match information from the payment gateway with your business systems. You can create an unlimited number of unique and properly-named custom parametersRecommended
standingInstruction.typeUNSCHEDULEDTo save card for one-click checkout
standingInstruction.modeINITIALTo save card for one-click checkout
standingInstruction.sourceCITTo save card for one-click checkout
createRegistrationtrueSave card for one-click checkoutOptional

When you are testing your integration, you can use the following parameters.

ParametersNotes
customParameters[3DS2_enrolled][3DS2_enrolled]This parameter is for the test environment only. Set to true for any card to specify that the card is enrolled in 3DS. Or, instead of the 3DS test parameters, you can use 3DS test cards.
customParameters[3DS2_flow][3DS2_flow]This parameter is for the test environment only. Set to challenge to force a 3DS challenge, or frictionless. Or, instead of the 3DS test parameters, you can use 3DS test cards.
testModeThis parameter is for the test environment only. Set to EXTERNAL to send the transaction to the acquirer's test environment. Set to INTERNAL to process the transaction in the gateway only.

For more details on 3DS testing, see the Gateway 3DS testing guide.

For full details of all the parameters, see Checkout request attributes.


Test in the gateway playground

You can test this request in the gateway playground at Gateway documentation for COPYandPAY integration.

Here is some example request data in the gateway playground format.

entityId={channelId}
amount=11.00
currency=EUR
paymentType=DB
integrity=true
merchantTransactionId=P123
billing.street1=Grillparzerstr 18
billing.city=Munich
billing.country=DE
billing.postcode=81675
[email protected]
customer.ip=2001:8a0:7f4b:1b00:dd4e:2bf6:1fb8:56af
customer.givenName=John
customer.surname=Smith
customer.phone=34667666666
customer.merchantCustomerId=CUST11
merchant.city=Vancouver
recipient.givenName=Jane
recipient.surname=Smith
recipient.state=QC
recipient.country=CAN
recipient.accountNumberType=RTN_AND_BANK_ACCOUNT
recipient.accountNumber=1234567890
recipient.birthDate=1985-01-01
recipient.phone=0123456789
customParameters[TransactionTypeIdentifier]=F07
customParameters[DateOfFunds]=250901
customParameters[AdditionalTrace]=ABC123
customParameters[CreditSenderName]=John Smith
customParameters[CreditSenderAddress]=Grillparzerstr 18|Munich|BAV|DEU|81675
customParameters[CreditSenderCity]=Munich
customParameters[CreditSenderState]=BAV
customParameters[CreditSenderCountry]=DEU
customParameters[CRMCustomerID]=CUST11
customParameters[OrderID]=SP-00011
customParameters[PaymentType]=AFT
threeDSecure.challengeIndicator=04
customParameters[3DS_enrolled]=true
customParameters[3DS2_flow]=challenge
testMode=EXTERNAL
entityId={channelId}
amount=11.00
currency=EUR
paymentType=DB
integrity=true
merchantTransactionId=P123
billing.street1=Grillparzerstr 18
billing.city=Munich
billing.country=DE
billing.postcode=81675
[email protected]
customer.ip=2001:8a0:7f4b:1b00:dd4e:2bf6:1fb8:56af
customer.givenName=John
customer.surname=Smith
customer.phone=34667666666
customer.merchantCustomerId=CUST11
merchant.city=Vancouver
recipient.givenName=Jane
recipient.surname=Smith
recipient.state=QC
recipient.country=CAN
recipient.accountNumberType=RTN_AND_BANK_ACCOUNT
recipient.accountNumber=1234567890
recipient.birthDate=1985-01-01
recipient.phone=0123456789
customParameters[TransactionTypeIdentifier]=F07
customParameters[DateOfFunds]=250901
customParameters[AdditionalTrace]=ABC123
customParameters[CreditSenderName]=John Smith
customParameters[CreditSenderAddress]=Grillparzerstr 18|Munich|BAV|DEU|81675
customParameters[CreditSenderCity]=Munich
customParameters[CreditSenderState]=BAV
customParameters[CreditSenderCountry]=DEU
customParameters[CRMCustomerID]=CUST11
customParameters[OrderID]=SP-00011
customParameters[PaymentType]=AFT
threeDSecure.challengeIndicator=04
standingInstruction.type=UNSCHEDULED
standingInstruction.mode=INITIAL
standingInstruction.source=CIT 
createRegistration=true
customParameters[3DS_enrolled]=true
customParameters[3DS2_flow]=challenge
testMode=EXTERNAL


Example response

Your successful request will receive a JSON response.

Response Example:

{
  "result":{
    "code":"000.200.100",
    "description":"successfully created checkout"
  },
  "buildNumber":"d7f3057c29b9a26d5151336767387bb393720d7e@2024-10-14 09:16:49 +0000",
  "timestamp":"2024-10-15 14:58:46+0000",
  "ndc":"702B930F656317E0D29A22D195F75A59.uat01-vm-tx03",
  "id":"702B930F656317E0D29A22D195F75A59.uat01-vm-tx03",
  "integrity":"sha384-KnYRC1jbE3C9SMGbJ5eU2Gx+AM9PCaApfqS6lk8MpPlvk9jIii4PFu297dPu4wcy"
}

From this response, you will need the value of the id and integrity for the next step.


2. Create the payment form on your web page

To create the payment form on your web page, add the following lines of JavaScript and HTML and enter the variables for your checkout and site.

  1. This script gets the checkout from the payment gateway. Add the checkoutId with the value of the id and add the value of integrity from the response in Step 1. Replace anonymous with the address of your website that loads the COPYandPAY checkout.
<script 
        src="https://eu-test.oppwa.com/v1/paymentWidgets.js?checkoutId={checkoutId}"
        integrity="{integrity}"
        crossorigin="anonymous">
</script>
  1. This HTML displays the checkout. The shopperResultUrl is a page on your site where the customer should be redirected after payment processing.
<form action="{shopperResultUrl}" class="paymentWidgets" data-brands="VISA MASTER"></form>

For example, a checkout script could look like this.

<script src="https://eu-test.oppwa.com/v1/paymentWidgets.js?checkoutId=702B930F656317E0D29A22D195F75A59.uat01-vm-tx03"
        integrity="sha384-KnYRC1jbE3C9SMGbJ5eU2Gx+AM9PCaApfqS6lk8MpPlvk9jIii4PFu297dPu4wcy"
        crossorigin="https://example.com">
</script>

For example, your checkout HTML could look as follows.

<form action="https://myshop.example.com/paid" class="paymentWidgets" data-brands="VISA MASTER"></form>

You can use the same checkout ID multiple times to retrieve a valid payment form. If a customer does
not finish the payment and then reloads the page or uses the browser's back button, you do not need to create a new checkout. However, these actions can generate multiple transactions in the system. For example, there can be one or more failed transactions and one successful transaction from the same checkout ID.

The checkout expires in 30 minutes, and after it expires, you must send a new request to create a checkout and use the new checkoutId to create the payment form again.

👍

Customise the payment widget

To customise the payment widget to match the look of your own site, see this customisation guide and the advanced options guide.

You can also add extra fields to this form, for example, to obtain the customer details during checkout.

To display some sample customisations, go to demo checkouts. You can obtain the code for the demo checkouts at Demo checkouts on GitHub.


Here is an example of a customised iframe checkout with a payment widget for a single payment.

Customised iframe checkout

Customised iframe checkout


3. Get the payment status from the checkout in the gateway

When the payment has been processed, CardCorp will redirect the customer to your shopperResultUrl.

To get the payment status, make a GET request to the payment link of your checkout in the gateway, as follows.

curl -G https://eu-test.oppwa.com/v1/checkouts/{id}/payment \
-d "entityId={channelId}" \
-H "Authorization: Bearer {auth_token}"

Replace the checkout {id}and the {auth_token} with your values.

A possible example of a payment response is as follows.

{
  "id":"8ac7a4a1992b555c01992dd857b21a80",
  "processingEntityId":"8ac7a4c890fc748b0190fe6ad56b0241",
  "paymentType":"DB",
  "paymentBrand":"VISA",
  "amount":"110.00",
  "currency":"EUR",
  "descriptor":"9325.9419.3758 ECOMChannel",
  "merchantTransactionId":"P124",
  "result":{
    "avsResponse":"U",
    "cvvResponse":"M",
    "code":"000.100.112",
    "description":"Request successfully processed in 'Merchant in Connector Test Mode'"
  },
  "resultDetails":{
    "ExtendedDescription":"Successful",
    "usedChallengeIndicator":"04",
    "clearingInstituteName":"Optimalpayment Test",
    "ConnectorTxID1":"2851740990",
    "AcquirerResponse":"0",
    "CardholderInitiatedTransactionID":"2851740990"
  },
  "card":{
    "bin":"420000",
    "binCountry":"US",
    "last4Digits":"0042",
    "holder":"John Smith",
    "expiryMonth":"10",
    "expiryYear":"2029",
    "issuer":{
      "bank":"JPMORGAN CHASE BANK, N.A.",
      "website":"HTTPS://WWW.CHASE.COM/",
      "phone":"+ (1) 212-270-6000"
    },
    "type":"CREDIT",
    "country":"US",
    "maxPanLength":"16",
    "binType":"PERSONAL",
    "regulatedFlag":"Y"
  },
  "customer":{
    "givenName":"John",
    "surname":"Smith",
    "merchantCustomerId":"CUST11",
    "phone":"34667666666",
    "email":"[email protected]",
    "ip":"2001:8a0:7f4b:1b00:dd4e:2bf6:1fb8:56af"
  },
  "billing":{
    "street1":"Grillparzerstr 18",
    "city":"Munich",
    "postcode":"81675",
    "country":"DE"
  },
  "threeDSecure":{
    "eci":"05",
    "version":"2.2.0",
    "dsTransactionId":"b1475a51-d63f-4cac-b18f-b0d08e275038",
    "challengeMandatedIndicator":"N",
    "transactionStatusReason":"",
    "acsTransactionId":"78662c8c-5374-4ae6-9ad3-7c2e238bc8a7",
    "cardHolderInfo":"",
    "authType":"01",
    "flow":"challenge",
    "authenticationTimestamp":"202509090939",
    "authenticationStatus":"Y",
    "acsReferenceNumber":"b04ea28d11294692a29f63d2f5c84bfc",
    "dsReferenceNumber":"13db2d60d08c4f6b83de194ca5245e57",
    "purchaseDate":"20250909093937"
  },
  "customParameters":{
    "CreditSenderAddress":"Grillparzerstr 18|Munich|BAV|DEU|81675",
    "SHOPPER_EndToEndIdentity":"eda37c55b2cbcd5580cab5f784347f98b9667f1948a586f277ecef2d26e9725c",
    "TransactionTypeIdentifier":"F07",
    "CTPE_DESCRIPTOR_TEMPLATE":"",
    "3DS2_flow":"challenge",
    "OrderID":"SP-00011",
    "CreditSenderName":"John Smith",
    "CreditSenderCountry":"DEU",
    "AdditionalTrace":"ABC123",
    "3DS_enrolled":"true",
    "DateOfFunds":"250909",
    "CreditSenderCity":"Munich",
    "CRMCustomerID":"CUST11",
    "PaymentType":"AFT",
    "CreditSenderState":"BAV"
  },
  "risk":{
    "score":"0"
  },
  "buildNumber":"096b1f93729846d036c10a2a916cf98d04aced6e@2025-09-09 00:42:29 +0000",
  "timestamp":"2025-09-09 09:39:43+0000",
  "recipient":{
    "givenName":"Jane",
    "surname":"Smith",
    "birthDate":"1985-01-01",
    "phone":"0123456789",
    "accountNumber":"1234567890",
    "accountNumberType":"RTN_AND_BANK_ACCOUNT",
    "state":"QC",
    "country":"CAN"
  },
  "ndc":"578F803C9B78955D8A398C365FC59227.uat01-vm-tx01",
  "source":"OPPUI",
  "paymentMethod":"CC",
  "shortId":"9325.9419.3758"
}

To interpret the payment response, see Transaction results.

There is a request limit for payment status calls, after which throttling will occur. You can send two (2) GET payment requests per minute for each checkout ID.

In the payment response, compare the returned values with the expected values for the following fields: ID(s), amount, currency, brand and type.

After a payment response status check is successful, you cannot use the checkout identifier again. So if you need to get the status, use the Transaction Reports endpoint with the payment id. You will also need the id to manage payments with the Backoffice API.


One-click checkout steps

The initial step to create the first checkout is the same as for a single-payment checkout but with the standingInstruction parameters and the createRegistration flag.

After the payment is made, from the payment response, you will need the card registrationId of each of the cards saved by the customer to create a one-click checkout and collect a repeated payment.

To create a one-click checkout, follow the instructions in section 4. Create a one-click checkout to collect a repeated payment at One-click checkout.


View the technical integration guide

The gateway Integration Guide provides a comprehensive playground with code samples in all major programming languages.

Questions? - Visit our website and chat to our payment experts to learn more about integrating our COPYandPAY iFrame checkout.