Skip to content

P2P Transfers

The functionality of P2P transfers allows you to transfer funds from one card to another.

Technically, on the side of payment systems, the transfer scheme is implemented in two stages.

  • Stage 1: charging funds from the source card.
  • Stage 2: crediting the receiver card.

The transfer interface offered by eComCharge allows you to implement this functionality in one step by executing the P2P operation.

When making a transfer from the payer (the cardholder of a source card) will be charged a commission, which is stated in your contract for P2P transfer. Thus, for the P2P operation the amount field stands for the amount to be credited to the receiver card. The commission for the P2P transfer is deducted from the source card.

Info

Refund operation is not possible for P2P transfers.


Requirements

When making a transfer from card to card, the following requirements established by the international payment system must be met:

  1. Mandatory verification of the source card using 3-D Secure authentication mechanism.
  2. Mandatory input of CVV2/CVC2 code for the source card.
  3. PCI DSS certification is required to process non-encrypted card data.

Info

For quick launch of the P2P transfer service, you can use the eComCharge hosted page for P2P operations.

Place https://checkout.ecomcharge.com/p2p/?public_key=:SHOP_PUBLIC_KEY, where public_key is your shop public key, on your resources and start your own P2P transfers service.


Checking the capability of the P2P transfer

To test the capability of the P2P transfer between the source card and the receiver card and to obtain information about the commission and additionally requested data about the source card or the receiving card, you should send one of the POST requests:

Authorization by the secret key

All requests use HTTP Basic authentication with Shop ID and Secret Key.

https://processing.ecomcharge.com/p2p-restrictions

Authorization by the public key

Authorization by the public key in synchronous mode

All requests are performed with Bearer authorization by the public key and mandatory transfer of the header X-Api-Version:2.

https://checkout.ecomcharge.com/ctp/api/verify-p2p

Authorization by the public key in asynchronous mode

In authorization in synchronous mode, the request is sent and response with all parameters is received.

In authorization in asynchronous mode, need to send a request (parameters as same as for synchronous request) to an asynchronous URL and receive a response with task status new and job_id.

All requests are performed with Bearer authorization by the public key and mandatory transfer of the header X-Api-Version:2.

URL for processing requests in asynchronous mode

https://checkout.ecomcharge.com/ctp/api/async/verify-p2p
Example of the response with task status new and job_id
{
    "status": "new",
    "job_id": "62c5b51a1d69bde6e5afaa70"
}

Get asynchronous task status

To get a task status, send a GET request with job_id to https://checkout.ecomcharge.com/ctp/api/async/jobs/job_id, where job_id has 62c5b51a1d69bde6e5afaa70 format.

Example of the response for the task with new status
{
    "status": "new",
    "job_id": "62c5b51a1d69bde6e5afaa70"
}
Example of the response for the task with failed status
{
    "job_id": "62c5b51a1d69bde6e5afaa70",
    "status": "failed",
    "response": {
        "status": "error",
        "errors": [
            "error"
        ],
        "message": "Request processing error. Please try again later",
        "finished": false
    }
}
Example of the response for the task with done status
{
    "status": "done",
    "job_id": "62c5b51a1d69bde6e5afaa70",
    "response": {
    //Standard response parameters
    }
}

Request

Parameter Type Description
request object
amount * required
integer The amount of the transfer, which should be credited to the receiver card, in the minimal currency units. For example, 32.45 USD should be sent as 3245.
currency * required
string The currency of the transfer in ISO-4217 format, for example USD.
credit_card object If required, you can use the client side encryption.
number * required
string The source card number.
exp_month * conditionally required
integer The card expiration month expressed with two digits (for example, 01).
exp_year * conditionally required
integer The card expiration year expressed with four digits (for example, 2026).
verification_value * conditionally required
string 3- or 4-digit security code (called CVC2, CVV2 or CID depending on the credit card brand).
token * conditionally required
string The source card token instead of the source card number.
recipient_card object If required, you can use the client side encryption.
number * required
string The receiver card number.
exp_month * conditionally required
integer The card expiration month expressed with two digits (for example, 01).
exp_year * conditionally required
integer The card expiration year expressed with four digits (for example, 2026).
token * conditionally required
string the receiver card token instead of the receiver card number.
test boolean true - testing the capability of the P2P transfer between test cards.
additional_data object A section with additional data.
p2p object The section with additional transfer data.
type * conditionally required
string(3) The transfer operation type in the alphanumeric format, issued by the processing center. Contact the Tech Support Team to check if you should submit this parameter.
Example of the JSON-request
{
"request": {
    "amount": 100,
    "currency": "USD",
    "credit_card": {
      "number": "4012001037141112"
    },
    "recipient_card": {
      "number": "4200000000000000"
    },
    "test": true
  }
}

Response

Transfer is possible

Parameter Type Description
status * required
string successful
message * required
string The message from the bank system.
commission object
minimum * required
float The minimal commission amount, that will be charged from the source card.
percent * required
float The percentage of commission, that will be charged from the source card.
bank_fee * required
float The absolute commission value, calculated by bank processing.
currency * required
string the currency of the commission in ISO-4217 format, for example USD.
test boolean true - testing the capability of the P2P transfer between test cards.
Example of the JSON-response
{
"status": "successful",
"message": "p2p is allowed",
"commission": {
    "minimum": 0.7,
    "percent": 1.5,
    "bank_fee": 7.35,
    "currency": "USD"
}
}

Transfer is not possible

Parameter Type Description
status * required
string failed
message * required
string The message from the bank system.
required_fields object If this section is returned, commission is not calculated.
credit_card array The parameters array, that should be requested about the source card. Possible array elements: holder, verification_value, exp_month, exp_year.
recipient_card array The parameters array, that should be requested about the receiver card. Possible array elements: holder, exp_month, exp_year.
Example of the JSON-response
{
"status": "failed",
"message": "Missed credit card fields: holder.Missed recipient card fields: holder.",
"required_fields": {
    "credit_card": [
    "holder"
    ],
    "recipient_card": [
    "holder"
    ]
}
}

Error

Parameter Type Description
error_code * required
string Error code.
message * required
string The error text description.
errors * required
object The parameters with errors.
Example of the JSON-response
{
"error_code": "invalid_params",
"message": "Unprocessable entity",
"errors": {
    "amount": [
    "must be an integer"
    ],
    "currency": [
    "is unknown ISO 4217 Alpha-3 code"
    ],
    "credit_card": {
    "number": [
        "is not a card number"
    ]
    },
    "recipient_card": {
    "number": [
        "is not a card number"
    ]
    }
}
}

Executing the P2P transfer

To make a P2P transfer via the eComCharge API, you need to send one of the POST requests:

Authorization by the secret key

All requests use HTTP Basic authentication with Shop ID and Secret Key.

https://processing.ecomcharge.com/transactions/p2ps

Authorization by the public key

Authorization by the public key in synchronous mode

All requests are performed with Bearer authorization by the public key and mandatory transfer of the header X-Api-Version:2.

https://checkout.ecomcharge.com/ctp/api/p2p

Authorization by the public key in asynchronous mode

In authorization in synchronous mode, the request is sent and response with all parameters is received.

In authorization in asynchronous mode, need to send a request (parameters as same as for synchronous request) to an asynchronous URL and receive a response with task status new and job_id.

All requests are performed with Bearer authorization by the public key and mandatory transfer of the header X-Api-Version:2.

URL for processing requests in asynchronous mode

https://checkout.ecomcharge.com/ctp/api/async/p2p
Example of the response with task status new and job_id
{
    "status": "new",
    "job_id": "62c5b51a1d69bde6e5afaa70"
}

Getting asynchronous task status

To get a task status, send a GET request with job_id to https://checkout.ecomcharge.com/ctp/api/async/jobs/job_id, where job_id has 62c5b51a1d69bde6e5afaa70 format.

Responses for task statuses (new, failed, done) as same as described in the chapter Getting asynchronous task status.

Request

Parameter Type Description
request object
amount * required
integer The amount of the transfer, which should be credited to the receiver card, in the minimal currency units. For example, 32.45 USD should be sent as 3245.
currency * required
string The currency of the transfer in ISO-4217 format, for example USD.
description * required
string Transfer description.
expired_at string The time in ISO 8601 format YYYY-MM-DDThh:mm:ssTZD until which the transfer should be confirmed.
tracking_id * required
string The transfer id in your system. Use a unique value to get the relevant transaction information, when you send a status query. Otherwise, you will receive the first transaction found by the tracking_id.
duplicate_check boolean true or false. The parameter controls the process of checking the incoming request for uniqueness. If during the 30 seconds a payment requests with the same amount and number or token are received, the request will be rejected. By default, this parameter has true value.
language string Language of your checkout page. If the parameter is set and transaction notification emails to customers are enabled, eComCharge will dispatch those emails in language locale. English (en) is set by default. Possible values of language parameter.
notification_url string The URL where notifications about a transaction will be posted to. The notification request format equals to the transaction response format.
return_url string URL on the Merchant's side where eComCharge will send Customer's browser when Customer returns from 3-D Secure verification.
test boolean true - testing the capability of the P2P transfer between test cards.
credit_card object If required, you can use the client side encryption.
number * required
string The source card number.
verification_value * required
string 3- or 4-digit security code (called CVC2, CVV2 or CID depending on the credit card brand). It can be sent along with token parameter and in this case, eComCharge will submit to acquiring bank card details with the given CVC2/CVV2/CID.
holder * conditionally required
string The source card holder name.
exp_month * required
integer The source card expiration month expressed with two digits (for example, 01).
exp_year * required
integer The source card expiration year expressed with four digits (for example, 2026).
token * conditionally required
string Instead of the above 5 parameters, you can send the source card token that you are received in response to the first transfer.
recipient_card object If required, you can use the client side encryption.
number * required
string Receiving card number.
holder * conditionally required
string The receiving card holder name.
exp_month * conditionally required
integer The receiving card expiration month expressed with two digits (for example, 01).
exp_year * conditionally required
integer The receiving card expiration year expressed with four digits (for example, 2026).
token * conditionally required
string instead of the above 5 parameters, you can send the recipient card token that you are received in response to the first transfer.
additional_data object The section with additional data.
receipt_text array Text, that will be added to the client's mail. Submit it as an array of strings, for example ["First line", "Second line"].
contract array An array, consisting of elements:

oneclick - eComCharge returns a card token to use it in the oneclick payment scheme. It means eComCharge will open a payment page with pre-filled card data and customer will be forced to enter CVC/CVV code and pass 3-D Secure verification to complete payment.
p2p object A section with additional transfer data.
type string The transfer operation type in the alphanumeric format the length is 3 characters, issued by the processing center.
customer * conditionally required
object A section of the customer information.
Contact Tech Support Team to inquire if your acquirer requires any of the section parameters.
ip string The IP address of the sender of the transfer.
email string The email of the sender of the transfer.
device_id string The device ID of the sender of the transfer.
sender_billing_address object
first_name string The first name of the sender of the transfer.
last_name string The last name of the sender of the transfer.
country string The billing country of the sender of the transfer in ISO 3166-1 alpha-2 format.
city string The billing city of the sender of the transfer.
state string Two-letter billing state of the sender of the transfer only if the billing address country is US or CA
zip string The billing ZIP or postal code of the sender of the transfer. If country=US, zip format must be NNNNN or NNNNN-NNNN.
address string The billing address of the sender of the transfer.
phone string The phone number of the sender of the transfer
recipient_billing_address object
first_name string The first name of the recipient of the transfer.
last_name string The last name of the recipient of the transfer.
country string The billing country of the recipient of the transfer in ISO 3166-1 alpha-2 format.
city string The billing city of the recipient of the transfer.
state string Two-letter billing state of the recipient of the transfer only if the billing address country is US or CA.
zip string The billing ZIP or postal code of the recipient of the transfer. If country=US, zip format must be NNNNN or NNNNN-NNNN.
address string The billing address of the recipient of the transfer.
phone string The phone number of the recipient of the transfer.
billing_address object The section billing_address has been left to maintain compatibility with the previous API version. If a new integration is developed, use the sections sender_billing_address and recipient_billing_address.
first_name string The first name of the sender of the transfer.
last_name string The last name of the sender of the transfer.
country string The billing country of the sender of the transfer in ISO 3166-1 alpha-2 format.
city string The billing city of the sender of the transfer.
state string Two-letter billing state of the sender of the transfer only if the billing address country is US or CA
zip string The billing ZIP or postal code of the sender of the transfer. If country=US, zip format must be NNNNN or NNNNN-NNNN.
address string The billing address of the sender of the transfer.
phone string The phone number of the sender of the transfer
Example of the JSON-request
{
    "request": {
        "test": false,
        "amount": 100,
        "currency": "EUR",
        "description": "Test transaction ütf",
        "tracking_id": "tracking_id_000",
        "billing_address": {
        "phone": "123"
        },
        "credit_card": {
        "number": "2012001037140165",
        "verification_value": "123",
        "exp_month": "01",
        "exp_year": "2026",
        "holder": "John Doe"
        },
        "recipient_card": {
        "number": "2019001037140165",
        "holder": "Mary Doe"
        },
        "customer": {
        "ip": "127.0.0.1",
        "device_id": "12312312321fff67",
        "email": "jahn_test@mial.com"
        },
        "sender_billing_address": {
        "first_name": "Mary",
        "last_name": "Smith",
        "country": "BY",
        "city": "Minsk",
        "address": "Gilbert 104"
        },
        "recipient_billing_address": {
        "first_name": "Jane",
        "last_name": "Smith",
        "country": "BY",
        "city": "Minsk",
        "address": "Gilbert 104"
        }
    }
}

Response

Response parameters replicate request parameters, except for the additional ones:

Parameter Type Description
transaction object
uid * required
string A UID of the processed transaction.
status * required
string status of the processed transfer.
amount * required
integer The amount of the transfer, which should be credited to the receiver card, in the minimal currency units. For example, 32.45 USD should be sent as 3245.
currency * required
string The currency of the transfer in ISO-4217 format, for example USD.
description * required
string Transfer description.
type * required
string p2p
payment_method_type * required
string credit_card
tracking_id * required
string tracking_id parameter value from the request.
message * required
string The request result message.
test * required
boolean true is a test operation.
created_at * required
string The transfer creation time in ISO 8601 format YYYY-MM-DDThh:mm:ssTZD.
updated_at * required
string The time of the last update of the transfer data in the database in ISO 8601 format YYYY-MM-DDThh:mm:ssTZD.
paid_at * required
string In case of a successfully completed transfer, this is the completion time of the transfer in the database in ISO 8601 format YYYY-MM-DDThh:mm:ssTZD.
redirect_url * required
string A URL of the page to finalize the transaction.

If the status parameter is set to incomplete, redirect the customer to this URL. It runs the 3-D Secure verification of the cardholder.
language * required
string The value of the language parameter from the request or en, if the parameter is not transferred in the request.
credit_card object
holder * required
string The source card holder name.
stamp * required
string The source card stamp.
brand * required
string The source card brand.
last_4 * required
string The last 4 digits of the source card.
first_1 * required
string The first digit of the source card
bin * required
string The source card BIN.
issuer_country * required
string The source card country.
issuer_name * required
string The issuing bank of the source card.
product * required
string The card product type of the source card.
exp_month * required
string The source card expiration month expressed with two digits (for example, 01).
exp_year * required
string The source card expiration year expressed with four digits (for example, 2026).
token string The source card token, which is returned if the contract parameter is transferred in the request.
recipient_card object
holder * required
string The recipient card holder name.
stamp * required
string The recipient card stamp.
brand * required
string The recipient card brand.
last_4 * required
string The last 4 digits of the recipient card.
first_1 * required
string The first digit of the recipient card.
bin * required
string The recipient card BIN.
issuer_country * required
string The recipient card country.
issuer_name * required
string The issuing bank of the recipient card.
product * required
string The card product type of the recipient card.
exp_month * required
integer The recipient card expiration month expressed with two digits (for example, 01).
exp_year * required
integer The recipient card expiration year expressed with four digits (for example, 2026).
token string The recipient card token, which is returned if the contract parameter is transferred in the request.
verify_p2p object The result of checking of the request parameters, that are required to complete the P2P transfer.
status * required
string status of the checking.
message * required
string The request result message.
amount * required
integer The amount of the transfer, which is credited to the receiver card, in the minimal currency units.
currency * required
string The currency of the transfer in ISO-4217 format, for example USD.
bank_fee * required
float The bank fee amount for P2P transfer.
required_fields * required
object
credit_card array The parameters array, that should be requested about source card. Possible array elements: holder, verification_value, exp_month, exp_year.
recipient_card array The parameters array, that should be additionally requested about source card. Possible array elements: holder, exp_month, exp_year.
p2p object P2P transfer data received from the bank.
receipt_url * required
string The link to the receipt of the processed transaction.
ref_id * required
string The number of the operation in the bank that made the P2P transfer.
bank_code * required
string The bank response code.
message * required
string A message with request result.
amount * required
integer The amount of the transfer, which is credited to the receiver card, in the minimal currency units.
currency * required
string The currency of the transfer in ISO-4217 format, for example USD.
billing_descriptor * required
string The text to be displayed on the bank statement of the source card.
gateway_id * required
integer The internal bank identification number in eComCharge system.
status * required
string The status of the bank transaction.
customer object A section of the customer information.
ip * required
string The IP address of the sender of the transfer.
email * required
string The email of the sender of the transfer.
device_id * required
string The device ID of the sender of the transfer.
sender_billing_address object
first_name * required
string The first name of the sender of the transfer.
last_name * required
string The last name of the sender of the transfer.
country * required
string The billing country of the sender of the transfer in ISO 3166-1 alpha-2 format.
city * required
string The billing city of the sender of the transfer.
state * required
string Two-letter billing state of the sender of the transfer only if the billing address country is US or CA.
zip * required
string The billing ZIP or postal code of the sender of the transfer. If country=US, zip format must be NNNNN or NNNNN-NNNN.
address * required
string The billing address of the sender of the transfer.
phone * required
string The phone number of the sender of the transfer.
recipient_billing_address object
first_name * required
string The first name of the recipient of the transfer.
last_name * required
string The last name of the recipient of the transfer.
country * required
string The billing country of the recipient of the transfer in ISO 3166-1 alpha-2 format.
city * required
string The billing city of the recipient of the transfer.
state * required
string Two-letter billing state of the recipient of the transfer only if the billing address country is US or CA.
zip * required
string The billing ZIP or postal code of the recipient of the transfer. If country=US, zip format must be NNNNN or NNNNN-NNNN.
address * required
string The billing address of the recipient of the transfer.
phone * required
string The phone number of the recipient of the transfer.
additional_data object The section with additional transfer data.
receipt_text array The text, that will be added to the client's mail. Submit it as an array of strings, for example ["First line", "Second line"].
Example of the JSON-response when a P2P transfer requires 3-D Secure verification
{
"transaction": {
    "uid": "1-82cc07d15d",
    "status": "incomplete",
    "amount": 100,
    "currency": "EUR",
    "description": "Test transaction ütf",
    "type": "p2p",
    "payment_method_type": "credit_card",
    "tracking_id": "tracking_id_000",
    "message": null,
    "test": false,
    "created_at": "2021-06-08T09:28:18.073Z",
    "updated_at": "2021-06-08T09:28:20.280Z",
    "paid_at": null,
    "language": "en",
    "redirect_url": "http://127.0.0.1:9887/process/1-82cc07d15d",
    "credit_card": {
        "holder": "John Doe",
        "stamp": "9723c73562cf57c89e162d7adaad7cff30d2fa9364b45063cd4ccfe980a38c53",
        "brand": "mir",
        "last_4": "0165",
        "first_1": "2",
        "bin": "220031",
        "issuer_country": null,
        "issuer_name": null,
        "product": null,
        "exp_month": 1,
        "exp_year": 2026,
        "token_provider": null,
        "token": null
    },
    "recipient_card": {
        "holder": "Mary Doe",
        "stamp": "9723c73562cf57c89e162d7adaad7cff30d2fa9364b45063cd4ccfe980a38c53",
        "brand": "mir",
        "last_4": "0165",
        "first_1": "2",
        "bin": "220031",
        "issuer_country": null,
        "issuer_name": null,
        "product": null,
        "exp_month": null,
        "exp_year": null,
        "token_provider": null,
        "token": null
    },
    "receipt_url": "https://gateway.ecomcharge.com/customer/transactions/1-82cc07d15d/89caa14443680985ce8ac2452fb9f82b4947926ff5bce0f15a7b4c4d0834ea5d",
    "recipient_billing_address": {
        "first_name": "Jane",
        "last_name": "Smith",
        "address": "Gilbert 104",
        "country": "BY",
        "city": "Minsk",
        "zip": null,
        "state": null,
        "phone": null
    },
    "sender_billing_address": {
        "first_name": "Mary",
        "last_name": "Smith",
        "address": "Gilbert 104",
        "country": "BY",
        "city": "Minsk",
        "zip": null,
        "state": null,
        "phone": null
    },
    "status_code": null,
    "id": "1-82cc07d15d",
    "verify_p2p": {
        "status": "successful",
        "message": "3DS",
        "amount": 100,
        "currency": "EUR",
        "bank_fee": null,
        "required_fields": null
    },
    "p2p": {
        "ref_id": null,
        "message": null,
        "amount": 100,
        "currency": "EUR",
        "billing_descriptor": null,
        "gateway_id": 1,
        "status": "incomplete",
        "auth_code": null,
        "rrn": null,
        "bank_code": null
    },
    "customer": {
        "ip": "127.0.0.1",
        "email": "jahn_test@mial.com",
        "device_id": "12312312321fff67",
        "birth_date": null
    }
}
}
Example of the JSON-response when a P2P transfer is successfully completed
{
"transaction": {
    "uid": "1-4f4db7559d",
    "status": "successful",
    "amount": 100,
    "currency": "EUR",
    "description": "Test transaction ütf",
    "type": "p2p",
    "payment_method_type": "credit_card",
    "tracking_id": "tracking_id_000",
    "message": "Successfully processed",
    "test": false,
    "created_at": "2021-06-08T11:54:11.725Z",
    "updated_at": "2021-06-08T11:54:39.219Z",
    "paid_at": "2021-06-08T11:54:39.203Z",
    "language": "en",
    "redirect_url": "http://127.0.0.1:9887/process/1-4f4db7559d",
    "credit_card": {
        "holder": "John Doe",
        "stamp": "9723c73562cf57c89e162d7adaad7cff30d2fa9364b45063cd4ccfe980a38c53",
        "brand": "mir",
        "last_4": "0165",
        "first_1": "2",
        "bin": "220031",
        "issuer_country": null,
        "issuer_name": null,
        "product": null,
        "exp_month": 1,
        "exp_year": 2026,
        "token_provider": null,
        "token": null
    },
    "recipient_card": {
        "holder": "Mary Doe",
        "stamp": "9723c73562cf57c89e162d7adaad7cff30d2fa9364b45063cd4ccfe980a38c53",
        "brand": "mir",
        "last_4": "0165",
        "first_1": "2",
        "bin": "220031",
        "issuer_country": null,
        "issuer_name": null,
        "product": null,
        "exp_month": null,
        "exp_year": null,
        "token_provider": null,
        "token": null
    },
    "receipt_url": "https://gateway.ecomcharge.com/customer/transactions/1-4f4db7559d/1b653d8b2c18f48a17b88435ca51e7b22bb69e5080a400faa40e3918ae6552d7",
    "recipient_billing_address": {
        "first_name": "Jane",
        "last_name": "Smith",
        "address": "Gilbert 104",
        "country": "BY",
        "city": "Minsk",
        "zip": null,
        "state": null,
        "phone": null
    },
    "sender_billing_address": {
        "first_name": "Mary",
        "last_name": "Smith",
        "address": "Gilbert 104",
        "country": "BY",
        "city": "Minsk",
        "zip": null,
        "state": null,
        "phone": null
    },
    "status_code": null,
    "id": "1-4f4db7559d",
    "verify_p2p": {
        "status": "successful",
        "message": "3DS",
        "amount": 100,
        "currency": "EUR",
        "bank_fee": null,
        "required_fields": null
    },
    "p2p": {
        "ref_id": "000005800042000145210608125426&000005800042000146210608125433",
        "message": "Approved",
        "amount": 100,
        "currency": "EUR",
        "billing_descriptor": null,
        "gateway_id": 1,
        "status": "successful",
        "auth_code": null,
        "rrn": null,
        "bank_code": null
    },
    "customer": {
        "ip": "127.0.0.1",
        "email": "jahn_test@mial.com",
        "device_id": "12312312321fff67",
        "birth_date": null
    }
}
}
Example of the JSON-response when a P2P transfer is not successfully completed
{
"transaction": {
    "uid": "1-d8d4cd2503",
    "status": "failed",
    "amount": 100,
    "currency": "EUR",
    "description": "Test transaction ütf",
    "type": "p2p",
    "payment_method_type": "credit_card",
    "tracking_id": "tracking_id_000",
    "message": "Failed",
    "test": false,
    "created_at": "2021-06-08T11:48:15.002Z",
    "updated_at": "2021-06-08T11:48:15.165Z",
    "paid_at": null,
    "language": "en",
    "redirect_url": "http://127.0.0.1:9887/process/1-d8d4cd2503",
    "credit_card": {
        "holder": "John Doe",
        "stamp": "9723c73562cf57c89e162d7adaad7cff30d2fa9364b45063cd4ccfe980a38c53",
        "brand": "mir",
        "last_4": "0165",
        "first_1": "2",
        "bin": "220031",
        "issuer_country": null,
        "issuer_name": null,
        "product": null,
        "exp_month": 1,
        "exp_year": 2026,
        "token_provider": null,
        "token": null
    },
    "recipient_card": {
        "holder": "Mary Doe",
        "stamp": "9723c73562cf57c89e162d7adaad7cff30d2fa9364b45063cd4ccfe980a38c53",
        "brand": "mir",
        "last_4": "0165",
        "first_1": "2",
        "bin": "220031",
        "issuer_country": null,
        "issuer_name": null,
        "product": null,
        "exp_month": null,
        "exp_year": null,
        "token_provider": null,
        "token": null
    },
    "receipt_url": "https://gateway.ecomcharge.com/customer/transactions/1-d8d4cd2503/047da8244b961a41b5ad52e138dd8b866e6e6e773c3510ec1eb1476192b62397",
    "recipient_billing_address": {
        "first_name": "Jane",
        "last_name": "Smith",
        "address": "Gilbert 104",
        "country": "BY",
        "city": "Minsk",
        "zip": null,
        "state": null,
        "phone": null
    },
    "sender_billing_address": {
        "first_name": "Mary",
        "last_name": "Smith",
        "address": "Gilbert 104",
        "country": "BY",
        "city": "Minsk",
        "zip": null,
        "state": null,
        "phone": null
    },
    "status_code": null,
    "id": "1-d8d4cd2503",
    "verify_p2p": {
        "status": "failed",
        "message": "3DS",
        "amount": 100,
        "currency": "EUR",
        "bank_fee": null,
        "required_fields": null
    },
    "p2p": {
        "ref_id": null,
        "message": null,
        "amount": 100,
        "currency": "EUR",
        "billing_descriptor": null,
        "gateway_id": 1,
        "status": "incomplete",
        "auth_code": null,
        "rrn": null,
        "bank_code": null
    },
    "customer": {
        "ip": "127.0.0.1",
        "email": "jahn_test@mail.com",
        "device_id": "12312312321fff67",
        "birth_date": null
    }
}
}

3-D Secure verification

The source card 3-D Secure verification process is identical with the card verification process for the authorization or payment operations.