Introduction

This document contains the API definition to be used by Radixx and Sky for their Sky integration.

Credit card payments (Web)

Openpay supports credit card payments using either Transbank or Global Collect as payment provider. This requires the use of the Openpay.js library to allow the customer to enter their card information in the website and send it directly to Openpay.

The flow for this integration is the following:

Creating a new Token

You can see how to use the Openpay Javascript library to create tokens here.

Note that for Ezy and Radixx the credit card’s billing address is required. Also, the street name and house number should be sent in the following fields:

Property Description
line1 string (required)
Use this field to send the Billing Address’ Street.
line2 string (required)
Use this field to send the Billing Address’ House number.

Requesting the installments available

Definition

POST /v1/{merchantId}/cards/{cardId}/shares

After the card token has been created, Ezy can optionally request the availability of installments for this payment. Openpay will return an array with the available installments of the ones requested. Unavailable installments won’t appear in this array.

The user could then select any of the installment options that Openpay returns, or choose to not pay in installments. These installments may or may not add interest, depending on the number of installments.

Note that currently only payments in CLP should return available installments. For other charges, the customer will only be able to pay in one installment.

Request

Example request

{
    "amount": "6000",
    "currency" : "CLP",
    "shares": [3, 6, 9, 12]
}
Property Description
amount numeric (required)
The total amount of the transaction.
e.g.: “amount” : 6000
currency string (required, length = 3)
The currency of the charge. It must be either “CLP” or “USD”.
e.g.: “currency” : “CLP”
shares numeric array (required)
Number of installments to search for.
e.g.: “shares” : [3]

Response

Example response

{
    "amount" : "6000",
    "currency" : "CLP",
    "available" : [
        {
            "share_id": "1234",
            "shares" : "3",
            "share_amount": "2000"
        },
        {
            "share_id": "5678",
            "shares" : "6",
            "share_amount": "1000"
        },
        {
            "share_id": "9012",
            "shares" : "9",
            "share_amount": "677"
        },
        {
            "share_id": "3456",
            "shares" : "12",
            "share_amount": "510",
            "deferred" : [
                {
                  "months" : 1,
                  "amount" : 511.00
                },
                {
                  "months" : 2,
                  "amount" : 512.00
                }
            ] 
        }
    ]
}

Returns a Shares object with the installment information, or an error response.

Completing the charge

Definition

POST /v1/{merchantId}/charges

To complete the transaction, the transaction information should be sent to Openpay, along with information regarding the customer and the flight. After this is done, Openpay will return the transaction result.

For each transaction, Ezy should send a unique Order ID in order to avoid duplicate charges. This Order ID can also be used to search for attempted transactions. This Order ID will be unique among successful transactions, which means that if a transaction fails or is rejected, the Order ID is allowed to be reused.

If the transaction is rejected by the payment provider, or if the Risk Assessment service determines that the transaction is risky, an error will be returned by Openpay. Other errors may also be returned in different situations. Please refer to this list for a list of possible errors.

Request

Example request

{
  "method": "card",
  "source_id": "kmui8z3yo45pvzcpqckx",
  "amount": 15.00,
  "currency": "USD",
  "provider": {
    "data": {
      "point_of_sale": "web_retail",
      "card_brand": "mastercard"
    }
  },
  "description": "Reservation B4JOW6 Payment 2016-05-21",
  "order_id": "B4JOW6 2016-05-21 15:23:12",
  "customer": {
    "name": "Eli",
    "last_name": "Lopez",
    "phone_number": "1234567890",
    "email": "eli.lopez@openpay.mx"
  },
  "gc_risk_assessment": {
    "website": "http://www.skyairline.cl/",
    "is_previous_customer": false,
    "airline_data": {
      "airline_code": "123",
      "airline_name": "Sky",
      "passenger_name": "Eli Lopez",
      "pnr": "B4JOW6",
      "flight_date": "2016-02-01",
      "agency_number": 12345678,
      "flight_legs": [
        {
          "carrier_code": "12",
          "airline_class": "1",
          "origin": "ABC",
          "destination": "DEF",
          "departure_date": "2015-01-01",
          "departure_time": "12:55",
          "flight_number": 123,
          "fare": "FARE",
          "fare_basis": "FAREBASIS",
          "allow_stopover": true
        }
      ],
      "is_third_party": false,
      "ticket_number": "1231212345678",
      "ticket_issue_date": "2016-02-01",
      "is_eticket": false,
      "is_restricted_ticket": true,
      "ticket_delivery_method": "eticket",
      "airline_customer_id": "123456",
      "is_registered_customer": false,
      "airline_invoice_number": "123123"
    }
  },
    "metadata": {
        "reservation_number": "123456"
    }
}
Property Description
method string (required)
It must contain the value “card” in order to specify the charge will be made from card.
e.g.: “method” : “card”
source_id string (required)
Token created previously with the customer’s card information.
e.g.: “source_id” : “kmui8z3yo45pvzcpqckx”
amount numeric (required)
Amount to charge. Must be an amount greater than zero, with up to two decimal digits.
e.g.: “amount” : 1500.23
currency String (required, length = 3)
Currency to use. For Sky it can be either CLP or USD.
e.g.: “currency” : “USD”
provider Object (required)
Information required for specific providers. In this case it needs to be a Direct charge provider object.
description string (required, length = 250)
A description for the charge.
order_id string (optional, length = 100)
Unique identifier of charge. Must be unique among all successful transactions.
customer object (required)
Information of the customer, sent in a Customer object.
gc_risk_assessment Object (required)
Information required to use Global Collect’s risk assessment. See Global Collect Risk Assessment object.
metadata list(key, value) (optional)
Custom information about the transaction that can be stored.

Response

Example response

{
  "id": "trzl3uze5jxnu3ab5cqm",
  "authorization": "OK2348",
  "method": "card",
  "operation_type": "in",
  "transaction_type": "charge",
  "card": {
    "type": "unknown",
    "brand": "mastercard",
    "address": {
      "line1": "Hidalgo St.",
      "line2": "120",
      "line3": "apt. 23",
      "state": "Queretaro",
      "city": "Queretaro",
      "postal_code": "76000",
      "country_code": "MX"
    },
    "card_number": "XXXXXXXXXXXX1732",
    "holder_name": "Eli Lopez",
    "expiration_year": "20",
    "expiration_month": "12",
    "allows_charges": true,
    "allows_payouts": false,
    "bank_name": null,
    "bank_code": "000"
  },
  "status": "completed",
  "conciliated": true,
  "creation_date": "2016-06-01T12:24:39-05:00",
  "operation_date": "2016-06-01T12:24:43-05:00",
  "description": "Reservation B4JOW6 Payment 2016-05-21",
  "error_message": null,
  "order_id": "B4JOW6 2016-05-21 15:23:12",
  "amount": 15,
  "provider": {
    "name": "global_collect"
  },
  "currency": "USD",
    "metadata": {
        "reservation_number": "123456"
    }
}

The response will return a Transaction object. The following are some of the important fields in the response:

Property Description
id string
Contains the transaction identifier. This is unique among all transactions.
e.g.: “id” : “tr9chzkyjbjfu6idj0o5”
status string
The transaction status. For this kind of payment, the possible values are “completed” or “failed”.
e.g.: “status” : “completed”
authorization string
Authorization code for the transaction, returned by the payment provider.
e.g.: “authorization” : “392034”
operation_date ISO 8601 date
Date when the card was charged.
e.g.: “operation_date” : “2016-06-01T12:24:43-05:00”
card
> brand
string
Card Brand, currently can be “visa”, “mastercard”, “american_express”, “jcb”, “diners” or “other”.
Note: For future compatibility, handle any unknown value as a value of “other”.
card
> number
string
The masked card number. It shows the last 4 digits of the card. The first 6 digits may or may not be returned.
provider
> name
string
Name of the provider used for the transaction. For card charges it can be either “transbank” or “global_collect”.

Openpay payment webpage (Radixx)

Definition

POST /v1/{merchantId}/charges

For payments through the Radixx application, Openpay will provide a webpage where the customer can enter their card information in order to complete a payment.

Creating the charge

Request example

{
  "confirm": "false",
  "method": "card",
  "amount": 15.00,
  "currency": "USD",
  "provider": {
    "data": {
      "point_of_sale": "web_retail",
      "card_brand": "mastercard"
    }
  },
  "order_id": "B4JOW6 Payment 1",
  "description": "B4JOW6 ABC-DEF 2016-05-06 32:34",
  "customer": {
    "name": "Eli",
    "last_name": "Lopez",
    "phone_number": "1234567890",
    "email": "eli.lopez@openpay.mx",
    "address": {
      "postal_code": "7600000",
      "city": "City",
      "line1": "Street",
      "line2": "12",
      "state": "State",
      "country_code": "US"
    }
  },
  "gc_risk_assessment": {
    "website": "http://www.openpay.mx",
    "is_previous_customer": false,
    "airline_data": {
      "airline_code": "123",
      "airline_name": "Sky",
      "passenger_name": "Juan Vazquez Juarez",
      "pnr": "4FW1O2",
      "flight_date": "2016-02-01",
      "agency_number": 12345678,
      "flight_legs": [
        {
          "carrier_code": "12",
          "airline_class": "1",
          "origin": "ABC",
          "destination": "DEF",
          "departure_date": "2015-01-01",
          "departure_time": "12:55",
          "flight_number": 123,
          "fare": "FARE",
          "fare_basis": "FAREBASIS",
          "allow_stopover": true
        }
      ],
      "is_third_party": false,
      "ticket_number": "1231212345678",
      "ticket_issue_date": "2016-02-01",
      "is_eticket": false,
      "is_restricted_ticket": true,
      "ticket_delivery_method": "eticket",
      "airline_customer_id": "123456",
      "is_registered_customer": false,
      "airline_invoice_number": "123123"
    }
  },
    "metadata": {
        "reservation_number": "123456"
    }
}

For this, Openpay will receive all the transaction information in a request, except for the card, and the parameter confirm set to false.

Note that, in this case, the customer billing address should be sent in the customer object.

Response example

{
  "id": "trtrhonzuawsojmrovww",
  "status": "charge_pending",
  "method": "card",
  "operation_type": "in",
  "transaction_type": "charge",
  "creation_date": "2016-06-01T09:48:38-05:00",
  "description": "B4JOW6 ABC-DEF 2016-05-06 32:34",
  "amount": 15,
  "order_id": "B4JOW6 Payment 1",
  "currency": "USD",
  "payment_method": {
    "type": "redirect",
    "url": "https://dev-api.openpay.mx/v1/m71mp8sc0zih82p6jb7n/charges/trtrhonzuawsojmrovww/card_capture/"
  },
    "metadata": {
        "reservation_number": "123456"
    }
}

Openpay will return the created transaction and an URL pointing to the webpage to show to the user. This webpage will request the customer’s card information in order to complete payment.

Receiving the Webhook

Webhook example

{
  "type": "charge.succeeded",
  "event_date": "2016-06-01T09:49:43-05:00",
  "transaction": {
    "id": "trtrhonzuawsojmrovww",
    "authorization": "OK2348",
    "method": "card",
    "operation_type": "in",
    "transaction_type": "charge",
    "card": {
      "type": "unknown",
      "brand": "mastercard",
      "address": {
        "postal_code": "7600000",
        "city": "City",
        "line1": "Street",
        "line2": "12",
        "state": "State",
        "country_code": "US"
      },
      "card_number": "542418XXXXXX1732",
      "holder_name": "Eli Lopez Rangel",
      "expiration_year": "20",
      "expiration_month": "12"
    },
    "status": "completed",
    "conciliated": true,
    "creation_date": "2016-06-01T09:48:38-05:00",
    "operation_date": "2016-06-01T09:49:43-05:00",
    "description": "B4JOW6 ABC-DEF 2016-05-06 32:34",
    "order_id": "B4JOW6 Payment 1",
    "amount": 15,
    "provider": {
      "name": "global_collect"
    },
    "currency": "USD"
  },
    "metadata": {
        "reservation_number": "123456"
    }
}

Once the payment is completed, Openpay will send a webhook to Radixx to confirm the payment. This webhook will be of type charge.succeeded if the transaction was successful, or charge.failed if the card was rejected.

Redirect payments (Web)

Definition

POST /v1/{merchantId}/charges

Some payment providers require the customer to be redirected to their webpage in order to enter their payment information. For these kind of payments, Openpay receives the transaction request without card information, and returns an URL to which the customer must be redirected.

The payment providers that support this method of payment are Transbank (T. Normal), Travel Club (Banco de Chile), and Khipu.

Creating the charge

Example Request

{
  "method": "card",
  "amount": 125.00,
  "currency": "USD",
  "description": "Redirect Payment",
  "order_id": "L0WP34-1",
  "customer": {
    "name": "Eli",
    "last_name": "Lopez",
    "phone_number": "1234567890",
    "email": "eli.lopez@openpay.mx"
  },
  "provider": {
    "name": "transbank",
    "data": {
      "url_success": "http://www.skyairline.cl/payment/",
      "url_failure": "http://www.skyairline.cl/payment/"
    }
  }
}

The request required for these kind of payments is almost the same for all of them. The only difference is the name field of the provider object, and the method field.

Provider name method
transbank card
travel_club card
khipu bank_account

For all of them, once the transaction is completed, the customer will be redirected to the URL sent in the field url_success if the transaction is successful, or the one in url_failure if it was rejected. The Transaction ID will be sent as a GET query parameter.

Example: http://www.skyairline.cl/payment/?id=tr9chzkyjbjfu6idj0o5

Example Response

{
  "id": "tr9chzkyjbjfu6idj0o5",
  "amount": 125.00,
  "currency": "USD",
  "authorization": null,
  "method": "card",
  "operation_type": "in",
  "transaction_type": "charge",
  "status": "charge_pending",
  "conciliated": true,
  "creation_date": "2016-06-01T17:09:04-05:00",
  "description": "Redirect Payment",
  "error_message": null,
  "order_id": "L0WP34-1",
  "due_date": "2016-06-01T18:09:04-05:00",
  "payment_method": {
    "type": "redirect",
    "url": "https://dev-api.openpay.mx/v1/m71mp8sc0zih82p6jb7n/charges/tr9chzkyjbjfu6idj0o5/redirect/"
  },
  "provider": {
    "name": "transbank"
  },
    "metadata": {
        "reservation_number": "123456"
    }
}

The following are the most relevant fields returned in the transaction:

Property Description
id string
Contains the transaction identifier. This is unique among all transactions.
e.g.: “id” : “tr9chzkyjbjfu6idj0o5”
status string
The transaction status. For this kind of payment, the initial status once the transaction is created is “charge_pending”.
e.g.: “status” : “charge_pending”
due_date ISO 8601 date
The limit date for the customer to complete payment. Once this date expires, the customer won’t be able to complete their payment. Note that Openpay will wait for the confirmation from the provider up to 30 minutes after this date.
e.g.: “due_date” : “2016-06-01T18:09:04-05:00”
payment_method
> url
string
URL to which the customer needs to be redirected in order to complete payment.
e.g.: “url” : “https://dev-api.openpay.mx/v1/m71mp8sc0zih82p6jb7n
/charges/tr9chzkyjbjfu6idj0o5/redirect/”

Take into consideration that Openpay will allow up to 30 minutes after the payment due date in order to confirm a payment.

 Receiving the confirmation

Example webhook

{
  "type": "charge.succeeded",
  "event_date": "2016-06-01T17:46:48-05:00",
  "transaction": {
    "id": "tr9chzkyjbjfu6idj0o5",
    "status": "completed",
    "authorization": "80039",
    "amount": 125.00,
    "currency": "USD",
    "method": "card",
    "operation_type": "in",
    "transaction_type": "charge",
    "conciliated": true,
    "metadata": {
      "transbank_buy_order": "tr9chzkyjbjfu6idj0o5",
      "shares": 3
    },
    "card": {
      "type": "credit",
      "brand": "other",
      "card_number": "XXXXXXXXXXXX6623",
      "holder_name": "Eli Lopez",
      "expiration_year": "20",
      "expiration_month": "12",
      "allows_charges": false,
      "allows_payouts": false,
      "bank_name": null,
      "bank_code": "000"
    },
    "creation_date": "2016-06-01T17:09:04-05:00",
    "operation_date": "2016-06-01T17:26:10-05:00",
    "description": "Redirect Payment",
    "error_message": null,
    "order_id": "L0WP34-1",
    "due_date": "2016-06-01T18:46:10-05:00",
    "payment_method": {
      "type": "redirect",
      "url": "https://dev-api.openpay.mx/v1/m71mp8sc0zih82p6jb7n/charges/tr9chzkyjbjfu6idj0o5/redirect/"
    },
    "provider": {
      "name": "transbank"
    },
    "metadata": {
        "reservation_number": "123456"
    }
  }
}

Once Openpay redirects to these pages or sends you a webhook, you must verify the current transaction status by calling the API. Depending on the returned status, you should do one of the following:

The following are the important fields to consider in the Webhook:

Property Description
type string
Type of webhook received. It can be either charge.succeeded for successful transactions, or charge.failed if the payment was rejected.
transaction
> id
 string
ID of the transaction that is being reported in the webhook. This should be used to retrieve the transaction information.

Once the transaction is retrieved from Openpay, you can verify the following fields:

Property Description
status string
The transaction status. Depending on the transaction status it can be completed, failed, in_progress, cancelled, or charge_pending.
e.g.: “status” : “completed”
authorization string
Authorization code returned by the payment provider when a transaction is successful.
e.g.: “authorization” : “80039”
card >
card_number
string
The masked card number used for the payment, with only the last four digits showing. This can only be retrieved when the redirect payment was made through Transbank.

Khipu Email (Web & Radixx)

Definition

POST /v1/{merchantId}/charges

Khipu can also be used to accept a payment by sending the customer an email with an URL to a webpage where the customer can complete their payment.

Requesting payment

Request example

{
    "method": "bank_account",
    "amount": 1000,
    "currency": "CLP",
    "description": "Khipu email payment",
    "order_id": "B4JOW2-20180401-1400",
    "due_date" : "2016-06-01T11:23:29-05:00",
    "customer": {
        "name": "Eli",
        "last_name": "Lopez",
        "phone_number": "1234567890",
        "email": "eli.lopez@openpay.mx"
    },
    "provider": {
        "name": "khipu",
        "data": {
            "send_email" : true,
            "url_success": "http://www.skyairline.cl/payment/",
            "url_failure": "http://www.skyairline.cl/payment/"
        }
    },
    "metadata": {
        "reservation_number": "123456"
    }
}

To use Khipu in this way, set the send_email field to true. The email will be sent to the one included in the request’s customer object.

You can optionally specify redirect URLs for the customer to be redirected to once they complete payment.

Response

{
  "id": "trncmwqlsdtcgixq01ue",
  "method": "card",
  "operation_type": "in",
  "transaction_type": "charge",
  "status": "charge_pending",
  "creation_date": "2016-06-01T10:53:29-05:00",
  "description": "Khipu email payment",
  "order_id": "B4JOW2-20180401-1400",
  "due_date" : "2016-06-01T11:23:29-05:00",
  "amount": 1000,
  "currency": "CLP",
  "provider": {
      "name": "khipu"
  },
    "metadata": {
        "reservation_number": "123456"
    }
}

Once the transaction is created, Khipu will send an email to the customer requesting their payment through their website.

Verifying payment

Example webhook

{
  "type": "charge.succeeded",
  "event_date": "2016-06-01T17:46:48-05:00",
  "transaction": {
    "id": "trncmwqlsdtcgixq01ue",
    "status": "completed",
    "authorization": "80039",
    "amount": 1000.00,
    "currency": "CLP",
    "method": "card",
    "operation_type": "in",
    "transaction_type": "charge",
    "conciliated": true,
    "creation_date": "2016-06-01T17:09:04-05:00",
    "operation_date": "2016-06-01T17:26:10-05:00",
    "description": "Khipu email payment",
    "error_message": null,
    "order_id": "L0WP34-1",
    "due_date": "2016-06-01T18:46:10-05:00",
    "provider": {
      "name": "khipu"
    },
    "metadata": {
        "reservation_number": "123456"
    }
  }
}

After the customer completes their payment and Khipu sends the confirmation to Openpay, Openpay will send a webhook of type charge.succeeded, indicating that the payment was completed.

When you receive the webhook, you must call the Openpay API to verify the status of the transaction using the Transaction ID.

Khipu without redirect (Web)

Another option to integrate Khipu is to implement both Khipu options on the website, reducing the need to redirect the customer to the Khipu website. These options are Khipu Simplified Transfer, which uses the Khipu browser extension to complete the payment, and Khipu Regular Transfer, which shows the customer the necessary information to go to their bank’s website and proceed with the transfer.

This section will explain how to implement both flows.

Requesting Bank and Email

Definition

GET /v1/{MERCHANT_ID}/providers/khipu/banks

Response

{
  "banks" : [
    {
      "bank_id" : "Bawdf",
      "name" : "DemoBank",
      "min_amount" : 200.0
    }
  ]
}

As a starting point for either flow, the customer needs to select which bank to use for their Khipu transfer, as well as provide their email to the website.

For the bank selection you will need a list of banks allowed by Khipu. Openpay provides an API that allows you to request this list. The selected bank’s ID should be used for future requests.

Khipu Simplified Transfer

Example Request

{
    "method": "bank_account",
    "amount": 10000,
    "currency": "CLP",
    "description": "Khipu Simplified Transfer",
    "order_id": "W56DB7-1",
    "customer": {
        "name": "Eli",
        "last_name": "Lopez",
        "phone_number": "1234567890",
        "email": "eli.lopez@openpay.mx"
    },
    "provider": {
        "name": "khipu",
        "data": {
            "url_success": "http://www.skyairline.cl/payment/",
            "url_failure": "http://www.skyairline.cl/payment/",
            "bank_id": "Bawdf"
        }
    },
    "metadata": {
        "reservation_number": "123456"
    }
}

With the email and bank information, you can attempt to create a Khipu Simplified Transfer. For this, you need to create the transaction using Khipu and sending the bank ID and the customer email as parameters.

Example Response

{
    "id": "trczfzjweqvvzpoeya5d",
    "method": "bank_account",
    "operation_type": "in",
    "transaction_type": "charge",
    "status": "charge_pending",
    "creation_date": "2016-04-27T11:09:16-05:00",
    "description": "Khipu Simplified Transfer",
    "due_date": "2016-04-27T11:09:21-05:00",
    "order_id": "W56DB7-1",
    "amount": 10000,
    "currency": "CLP",
    "provider": {
        "name": "khipu"
    },
    "payment_method": {
        "type": "redirect",
        "url": "http://dev-api.openpay.mx/v1/m71mp8sc0zih82p6jb7n/charges/trczfzjweqvvzpoeya5d/redirect/",
        "khipu_data" : {
            "payment_id": "uqqdrwodfptb"
        }
    },
    "metadata": {
        "reservation_number": "123456"
    }
}

Note that the bank selected might not allow for a Simplified Transfer charge. In that case, an error will be returned, and you should attemt a Khipu Regular Transfer.

If the transaction is successful, you can use the Khipu Javascript Library to integrate the payment in your webpage.

Khipu Regular Transfer

Example Request

{
    "method": "bank_account",
    "amount": 10000,
    "currency": "CLP",
    "description": "Khipu Simplified Transfer",
    "order_id": "W56DB7-1",
    "customer": {
        "name": "Eli",
        "last_name": "Lopez",
        "phone_number": "1234567890",
        "email": "eli.lopez@openpay.mx"
    },
    "provider": {
        "name": "khipu",
        "data": {
            "url_success": "http://www.skyairline.cl/payment/",
            "url_failure": "http://www.skyairline.cl/payment/",
            "bank_id": "Bawdf",
            "payer_personal_identifier": "11.111.111-1",
            "request_bank_data": "true"
        }
    },
    "metadata": {
        "reservation_number": "123456"
    }
}

For the Khipu Regular Transfer, in addition to the customer’s email and bank, we require the customer’s RUT. The parameter request_bank_data should also be set to true.

Example Response

{
    "id": "trczfzjweqvvzpoeya5d",
    "method": "bank_account",
    "operation_type": "in",
    "transaction_type": "charge",
    "status": "charge_pending",
    "creation_date": "2016-04-27T11:09:16-05:00",
    "description": "Khipu Simplified Transfer",
    "due_date": "2016-04-27T11:09:21-05:00",
    "order_id": "W56DB7-1",
    "amount": 10000,
    "currency": "CLP",
    "provider": {
        "name": "khipu"
    },
    "payment_method": {
        "type": "redirect",
        "url": "http://dev-api.openpay.mx/v1/m71mp8sc0zih82p6jb7n/charges/trczfzjweqvvzpoeya5d/redirect/",
        "khipu_data" : {
            "payment_id": "uqqdrwodfptb",
            "allows_simplified" : false,
            "source_bank_name" : "Demo Bank",
            "source_bank_url" : "https://www.bancodemo.com",
            "destination_bank_name": "Banco Demo",
            "destination_bank_url" : "https://www.bancodemo.com",
            "account_identifier" : 1234567890,
            "account_type" : "Cuenta corriente",
            "account_holder_personal_identifier" : "76.187.287-7",
            "account_holder_name" : "khipu dev a",
            "account_holder_email" : "transferencias@khipu.com"
        }
    },
    "metadata": {
        "reservation_number": "123456"
    }
}

Once you have the bank account information, you need to show the customer this information and direct them to their bank’s website (source_bank_url) so they can complete the payment.