# Payment Page Integration Guide

If you are non-PCI DSS compliance, you can use this type of integration to ensure that the Cards data of the customer is securely processed by DOKU.

***

### Integration steps <a href="#integration-steps" id="integration-steps"></a>

Here is the overview of how to integrate with Cards channel:

1. Generate payment URL (Cards payment page)
2. Display payment URL (Cards payment page)
3. Create test payment
4. Acknowledge payment result

<figure><img src="https://3092822868-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqCxtvLoJNNxvp4U7kLHd%2Fuploads%2F6cqPK6e0MNtvpih17Vyq%2FCard%20Transaction%20Flow.png?alt=media&#x26;token=3408e322-b8a6-4a8a-a39e-8bfff9bb42d9" alt=""><figcaption><p>Cards Transaction Flow</p></figcaption></figure>

***

#### 1. Generate payment URL (Card payment page) <a href="#id-1-generate-payment-url-credit-card-payment-page" id="id-1-generate-payment-url-credit-card-payment-page"></a>

To generate a payment URL, you will need to hit this API through your backend:

**API Request**

| Type                          | Value                                                      |
| ----------------------------- | ---------------------------------------------------------- |
| **HTTP Method**               | POST                                                       |
| **API endpoint (Sandbox)**    | `https://api-sandbox.doku.com/credit-card/v1/payment-page` |
| **API endpoint (Production)** | `https://api.doku.com/credit-card/v1/payment-page`         |

Here is the sample of request header to generate the payment URL:

<pre><code><strong>Client-Id: MCH-0001-10791114622547
</strong>Request-Id: b266c265-3d61-4708-9860-c0d5b9a98f8c
Request-Timestamp: 2020-08-11T08:45:42Z
Signature: HMACSHA256=9UPUFzOqJc47aJzD9ESOTcWg6TMsg3mqSP+DnUO8ENE=
</code></pre>

<table><thead><tr><th width="199">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><strong><code>client-id</code></strong></td><td>Client ID retrieved from DOKU Back Office</td></tr><tr><td><strong><code>request-id</code></strong></td><td>Unique random string (max 128 characters) generated from merchant side to protect duplicate request</td></tr><tr><td><strong><code>request-timestamp</code></strong></td><td>Timestamp request on UTC time in ISO8601 UTC+0 format. It means to proceed transaction on UTC+7 (WIB), merchant need to subtract time with 7. Ex: to proceed transaction on September 22th 2020 at 08:51:00 WIB, the timestamp should be 2020-09-22T01:51:00Z</td></tr><tr><td><strong><code>signature</code></strong></td><td>Security parameter that needs to be generated on merchant Backend and placed to the header request to ensure that the request is coming from valid merchant. Please refer to <a href="https://developers.doku.com/getting-started-with-doku-api/signature-component/non-snap/signature-component-from-request-header">this section</a> to generate the signature</td></tr></tbody></table>

Here is the sample request body to generate payment URL:

```json
{
    "order": {
        "invoice_number": "INV-20210118-0001",
        "amount": 90000,
        "line_items": [
            {
                "name": "T-Shirt Red",
                "price": 30000,
                "quantity": 2
            },
            {
                "name": "Polo Navy",
                "price": 30000,
                "quantity": 1
            }
        ],
        "callback_url": "https://merchant.com/success-url",
        "failed_url": "https://merchant.com/failed-url",
        "auto_redirect": false,
        "descriptor": "Test Descriptor"
    },
    "card": {
        "token": "a55b8d8df709607d2a343778898f41d0",
        "save": false
    },
    "customer": {
        "id": "CUST-0001",
        "name": "Jotaro Kujo",
        "email": "jotaro_kujo@example.com",
        "phone": "6285694566147",
        "address": "Menara Mulia Lantai 8",
        "country": "ID"
    },
    "payment": {
        "type": "SALE",
        "acquirer":"BRI",
        "tenor": 3
    },
    "override_configuration": {
        "themes": {
            "language": "EN",
            "background_color": "F5F8FB",
            "font_color": "1A1A1A",
            "button_background_color": "E1251B",
            "button_font_color": "FFFFFF"
        },
        "promo": [
            {
                "bin": "142498",
                "discount_amount": 20000
            },
            {
                "bin": "314498",
                "discount_amount": 20000
            },
            {
                "bin": "091234",
                "discount_amount": 10000
            },
            {
                "bin": "091234",
                "discount_amount": 10000
            }
        ],
        "allow_bin": ["461700","410505","557338"],
        "allow_tenor": [0,3,6]
    },
    "additional_info": {
        "override_notification_url": "https://another.example.com/payments/notifications",
        "disclaimer" : {
            "id" : "Testing",
            "en" : "testing englis"
        }
    }
}
```

#### Request body Explanation

<table><thead><tr><th width="196">Body Parameter</th><th>Type`</th><th>Mandatory</th><th>Description</th></tr></thead><tbody><tr><td><code>order.amount</code></td><td>number</td><td>Mandatory</td><td>In IDR Currency and without decimal</td></tr><tr><td><code>order.invoice_number</code></td><td>string</td><td>Mandatory</td><td>Generated by merchant to identify the order<br>Allowed chars: <code>alphabetic, numeric, special chars</code><br>Max length: <code>64</code><br><code>(30 If you have Mandiri Acquirer)</code></td></tr><tr><td><code>order.callback_url</code></td><td>string</td><td>Conditional</td><td>Merchant URL that will redirected to after the order success. Mandatory if merchant set <code>order.auto_redirect</code> to <code>true</code><br>Allowed chars: <code>alphabetic, numeric, special chars</code></td></tr><tr><td><code>order.failed_url</code></td><td>string</td><td>Conditional</td><td>Merchant URL that will redirected to after the order failed. If not set, then will redirect to <code>callback_url</code><br>Allowed chars: <code>alphabetic, numeric, special chars</code></td></tr><tr><td><code>order.auto_redirect</code></td><td>string</td><td>Mandatory</td><td>Redirection to defined <code>callback_url</code> after payment process completed<br>Possible value: <code>true, false</code><br>Default value: <code>false</code></td></tr><tr><td><code>order.line_items.name</code></td><td>string</td><td>Optional</td><td>Name of the product item.<br>Max Length: <code>255</code></td></tr><tr><td><code>order.line_items.price</code></td><td>number</td><td>Conditional</td><td>Price of the product item. Total price and quantity must match with the <code>order.amount</code>.</td></tr><tr><td><code>order.line_items.quantity</code></td><td>number</td><td>Conditional</td><td>Quantity of the product item.</td></tr><tr><td><code>order.descriptor</code></td><td>string</td><td>Optional</td><td>Custom string to be printed on Customer's billing statement history on issuing side, Please contact DOKU team to manually configure this feature first<br>Max length: <code>22</code> <code>need to be activated, please consult DOKU team first</code></td></tr><tr><td><code>card.token</code></td><td>string</td><td>optional</td><td>Card token generated by DOKU. If you sent this, then the customer's Card will be pre-filled in the Card Number field.</td></tr><tr><td><code>card.save</code></td><td>boolean</td><td>Optional</td><td>Set <code>true</code> if you want to force customer to save the card token for the next payment</td></tr><tr><td><code>customer.id</code></td><td>string</td><td>Conditional</td><td>Unique customer identifier generated by merchant. Mandatory if merchant wants to use tokenization feature.</td></tr><tr><td><code>customer.name</code></td><td>string</td><td>Recommended</td><td>Customer Name</td></tr><tr><td><code>customer.email</code></td><td>string</td><td>Conditional</td><td>Customer email.<br>Mandatory if <code>customer phone</code> value blank.<br>Bringing the proper email will improve Credit Card Approval Rate<br><strong><code>DO NOT SEND STATIC/DUMMY VALUE</code></strong></td></tr><tr><td><code>customer.phone</code></td><td>string</td><td>Conditional</td><td>Customer phone number. Format: <code>{calling_code}{phone_number}</code>. Example: 6281122334455.<br>Mandatory if <code>customer email</code> value blank.<br>One of them must be filled in between <code>customer email</code> and <code>customer phone</code></td></tr><tr><td><code>customer.address</code></td><td>string</td><td>Optional</td><td>Customer address</td></tr><tr><td><code>customer.country</code></td><td>string</td><td>Optional</td><td>2 alphabetic country code ISO 3166-1</td></tr><tr><td><code>override_configuration.themes.</code><br><code>language</code></td><td>string</td><td>Optional</td><td>Default language that will be displayed on the Payment Page<br>Possible value: English <code>EN</code>, Indonesia <code>ID</code><br>Default: English <code>EN</code></td></tr><tr><td><code>override_configuration.themes.</code><br><code>background_color</code></td><td>string</td><td>Optional</td><td>HEX color code for the payment page background color. Example: <code>FFFFFF</code><br>Default: Light gray <code>F5F8FB</code></td></tr><tr><td><code>override_configuration.themes.</code><br><code>font_color</code></td><td>string</td><td>Optional</td><td>HEX color code for the payment page font color. Example: <code>000000</code><br>Default: Soft black <code>1A1A1A</code></td></tr><tr><td><code>override_configuration.themes.</code><br><code>button_background_color</code></td><td>string</td><td>Optional</td><td>HEX color code for the payment page button background color. Example: <code>000000</code><br>Default: Red <code>E1251B</code></td></tr><tr><td><code>override_configuration.themes.</code><br><code>button_font_color</code></td><td>string</td><td>Optional</td><td>HEX color code for the payment page button font color. Example: <code>FFFFFF</code><br>Default: White <code>FFFFFF</code></td></tr><tr><td><code>override_configuration.promo[].</code><br><code>bin</code></td><td>string</td><td>Optional</td><td>BIN that will get the promo<br><code>Please consult with Issuer Bank or DOKU team, some BIN are 6 and some are 8 Digit</code></td></tr><tr><td><code>override_configuration.promo[].</code><br><code>discount_amount</code></td><td>number</td><td>Optional</td><td>Promo Discount if BIN input matched<br>(final amount = <code>order.amount</code> - <code>override_configuration.promo[].discount_amount</code>)</td></tr><tr><td><code>override_configuration.allow_bin</code></td><td>number</td><td>Optional</td><td>Transaction only accept BIN listed here <br><code>Please consult with Issuer Bank or DOKU team, some BIN are 6 and some are 8 Digit</code></td></tr><tr><td><code>override_configuration.allow_tenor</code></td><td>number</td><td>Optional</td><td>Transaction only accept installment tenor listed here</td></tr><tr><td><code>additional_info.override_notification_url</code></td><td>string</td><td>Optional</td><td>This parameter is intended to override the configured <code>Notification URL</code> with another URL.  Click <a href="../../../../get-started-with-doku-api/notification/override-notification-url">here</a> for more information.</td></tr><tr><td><code>additional_info.disclaimer</code></td><td>object</td><td>Optional</td><td>Bring this if you want to customer to opt-in customer has agreed to the payment disclaimer</td></tr><tr><td><code>additional_info.disclaimer.id</code></td><td>object</td><td>Optional</td><td>disclaimer message in Indonesian</td></tr><tr><td><code>additional_info.disclaimer.en</code></td><td>object</td><td>v</td><td>disclaimer message in English(default)</td></tr><tr><td><code>payment.type</code></td><td>string</td><td>Conditional</td><td>Bring this if you have more than 1 type of Cards payment type to specify how you want this transaction to be processed (Possible Values : <code>INSTALLMENT</code>, <code>AUTHORIZE</code>, <code>SALE</code>)</td></tr><tr><td><code>payment.auto_capture</code></td><td>string</td><td>Optional</td><td>Brings this if the payment type is 'authorize' but you wish to capture the transaction right away as if it was a SALE transaction <br><br><code>eg : "auto_capture"=:true</code></td></tr><tr><td><code>payment.acquirer</code></td><td>string</td><td>Conditional</td><td>Becomes mandatory if transaction type is <code>INSTALLMENT</code>, to specify to which acquirer you want this transaction to be processed to (Possible Values: <code>BNI</code>, <code>BRI</code>, <code>BANK_CIMB</code>, <code>BANK_MANDIRI</code>, <code>BCA, BANK_PERMATA, DANAMON, BUKOPIN, HSBC, OCBC_NISP</code>)</td></tr><tr><td><code>payment.tenor</code></td><td>number</td><td>Conditional</td><td>Becomes mandatory if transaction type is <code>INSTALLMENT</code>, to specify which tenor you want this transaction to be processed with</td></tr></tbody></table>

{% hint style="info" %}
**Payment Type**

* **Sale**: A transaction where funds are immediately transferred from the customer's account to the merchant's account.
* **Authorize-Capture**: A two-step transaction where funds are first reserved (authorized) and later transferred (captured) from the customer's account to the merchant's account.
* **Installment**: A transaction where the total amount is split into multiple smaller payments over a specified period.
* **MOTO (Mail Order/Telephone Order)**: A transaction where payment does not require CVV or OTP, suitable for subscription payment type.
* **Recurring**: A transaction where payment does not require CVV or OTP, suitable for subscription payment type, with the latest specification more secure compared to **MOTO**.

{% endhint %}

{% hint style="info" %}
**Integration Type**

Currently for Integration through[ DOKU JS Integration](https://developers.doku.com/accept-payments/direct-api/non-snap/cards/doku-js-integration-guide), payment type must be either 'SALE' or 'AUTHORIZE'
{% endhint %}

**API Response**

After hitting the above API request, DOKU will give the response.

| Type            | Value   |
| --------------- | ------- |
| **HTTP Status** | 200     |
| **Result**      | SUCCESS |

Here is the sample response header:

```
Client-Id: MCH-0001-10791114622547
Request-Id: b266c265-3d61-4708-9860-c0d5b9a98f8c
Response-Timestamp: 2020-08-11T08:45:42Z
Signature: HMACSHA256=1jap2tpgvWt83tG4J7IhEwUrwmMt71OaIk0oL0e6sPM=
```

<table><thead><tr><th width="199">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><strong><code>client-id</code></strong></td><td>Client ID retrieved from DOKU Back Office</td></tr><tr><td><strong><code>request-id</code></strong></td><td>Unique random string (max 128 characters) generated from merchant side to protect duplicate request</td></tr><tr><td><strong><code>request-timestamp</code></strong></td><td>Timestamp request on UTC time in ISO8601 UTC+0 format. It means to proceed transaction on UTC+7 (WIB), merchant need to subtract time with 7. Ex: to proceed transaction on September 22th 2020 at 08:51:00 WIB, the timestamp should be 2020-09-22T01:51:00Z</td></tr><tr><td><strong><code>signature</code></strong></td><td>Security parameter that needs to be generated on merchant Backend and placed to the header request to ensure that the request is coming from valid merchant. Please refer to <a href="https://developers.doku.com/getting-started-with-doku-api/signature-component/non-snap/signature-component-from-request-header">this section</a> to generate the signature</td></tr></tbody></table>

Here is the sample of response body:

```json
{
    "order": {
        "invoice_number": "INV-20210118-0001",
        "line_items": [
            {
                "name": "T-Shirt Red",
                "price": 30000,
                "quantity": 2
            },
            {
                "name": "Polo Navy",
                "price": 30000,
                "quantity": 1
            }
        ]
    },
    "credit_card_payment_page": {
        "url": "https://sandbox.doku.com/wt-frontend-transaction/dynamic-payment-page?signature=OVVQVUZ6T3FKYzQ3YUp6RDlFU09UY1dnNlRNc2czbXFTUCtEblVPOEVORT0=&clientId=MCH-0001-10791114622547&invoiceNumber=INV-20210118-0001&requestId=8quQyK39l4aM5cCml0Yy"
    },
    "credit_card_js": {
     "session_id": "ps_sit_1761107459919_Dv7nPW51NX"
     },
    "additional_info": {
        "override_notification_url": "https://another.example.com/payments/notifications"
    }
}
```

Here is the sample of **failed** response body:

```
{
    "errors": {
        "code": "INVALID_PARAMETER",
        "message": "Invalid Total Amount And Line Items",
        "type": "Invalid Parameter"
    }
}
```

#### Response Body Explanation

<table><thead><tr><th>Body Parameter</th><th width="122">Type</th><th>Mandatory</th><th>Description</th></tr></thead><tbody><tr><td><code>order.invoice_number</code></td><td><code>string</code></td><td>Mandatory</td><td>Same as the request</td></tr><tr><td><code>order.line_items.name</code></td><td><code>string</code></td><td>Optional</td><td>Same as the request</td></tr><tr><td><code>order.line_items.price</code></td><td><code>number</code></td><td>Optional</td><td>Same as the request</td></tr><tr><td><code>order.line_items.quantity</code></td><td>number</td><td>Optional</td><td>Same as the request</td></tr><tr><td><code>credit_card_payment_page.url</code></td><td>string</td><td>Mandatory</td><td>Cards Payment Page URL generated by DOKU that merchant displays to the customer</td></tr><tr><td><code>credit_card_js.session_id</code></td><td>string</td><td>Conditional</td><td>Identifier for <a href="doku-js-integration-guide">DOKU JS integration</a>, will be returned for merchant who uses DOKU JS feature</td></tr><tr><td><code>additional_info.override_notification_url</code></td><td>string</td><td>Optional</td><td>Same as the request</td></tr></tbody></table>

{% hint style="info" %}
**INFO**

DOKU provides risk assessment for card transactions, your customer data sent to us will help manage your risk of every transaction.
{% endhint %}

***

#### 2. Display payment URL (Cards payment page) <a href="#id-2-display-payment-url-credit-card-payment-page" id="id-2-display-payment-url-credit-card-payment-page"></a>

You can display the payment URL as an iFrame or as a dedicated page to your customer by using `credit_card_payment_page.url`  the retrieved from API Response. Here is the sample of Cards on the iFrame:

<figure><img src="https://3092822868-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqCxtvLoJNNxvp4U7kLHd%2Fuploads%2Fujn8LR1dKHBVhu3liBKk%2FCXz.JPG?alt=media&#x26;token=f85b0377-2b1c-47dc-bc49-fd59e4a05523" alt=""><figcaption></figcaption></figure>

***

#### 3. Creating Test Payment <a href="#id-3-creating-test-payment" id="id-3-creating-test-payment"></a>

You can try the payment with various Cards listed here:

* [Test Credit Card List](https://sandbox.doku.com/integration/simulator/credit-card)

***

#### 4. Acknowledge payment result <a href="#id-4-acknowledge-payment-result" id="id-4-acknowledge-payment-result"></a>

After the payment is made by your customer, DOKU will send **HTTP Notification** to your defined `Notification URL`. Learn how to handle the notification from DOKU:

* [Handling HTTP Notification](https://developers.doku.com/getting-started-with-doku-api/notification)

***

{% hint style="info" %}
**INFO**

You can check the list of possible response code and how to handle them[ here](https://developers.doku.com/get-started-with-doku-api/response-code/http-status-and-case-code)&#x20;
{% endhint %}

### Authorize Capture <a href="#additional-features" id="additional-features"></a>

If you bring `payment.type ='AUTHORIZATION'` you need to capture the transaction within 7 days to have the amount actually transferred to your settlement balance or the transaction will be automatically released.

After you get the `payment.authorize_id`in notification HTTP, then your backend must trigger the API Charge to DOKU:

**API Request**

| Type                          | Value                                              |
| ----------------------------- | -------------------------------------------------- |
| **HTTP Method**               | POST                                               |
| **API endpoint (Sandbox)**    | `https://api-sandbox.doku.com/credit-card/capture` |
| **API endpoint (Production)** | `https://api.doku.com/credit-card/capture`         |

Here is the sample of request header to capture the transaction:

```
Client-Id: MCH-0001-10791114622547
Request-Id: 071a6a32-6785-4011-833d-d2c2049cf744
Request-Timestamp: 2021-08-24T08:46:42Z
Signature: HMACSHA256=9UPUFzOqJc47aJzD9ESOTcWg6TMsg3mqSP+DnUO8ENE=
```

<table><thead><tr><th width="199">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><strong><code>client-id</code></strong></td><td>Client ID retrieved from DOKU Back Office</td></tr><tr><td><strong><code>request-id</code></strong></td><td>Unique random string (max 128 characters) generated from merchant side to protect duplicate request</td></tr><tr><td><strong><code>request-timestamp</code></strong></td><td>Timestamp request on UTC time in ISO8601 UTC+0 format. It means to proceed transaction on UTC+7 (WIB), merchant need to subtract time with 7. Ex: to proceed transaction on September 22th 2020 at 08:51:00 WIB, the timestamp should be 2020-09-22T01:51:00Z</td></tr><tr><td><strong><code>signature</code></strong></td><td>Security parameter that needs to be generated on merchant Backend and placed to the header request to ensure that the request is coming from valid merchant. Please refer to <a href="https://developers.doku.com/getting-started-with-doku-api/signature-component/non-snap/signature-component-from-request-header">this section</a> to generate the signature</td></tr></tbody></table>

Here is the sample request body to capture the transaction:

```json
{
    "payment": {
        "authorize_id": "12312391719112",
        "capture_amount": 90000
    }
}
```

Request Body Explanation

| Parameter                | Type     | Mandatory | Description                                                                                           |
| ------------------------ | -------- | --------- | ----------------------------------------------------------------------------------------------------- |
| `payment.authorize_id`   | `string` | Mandatory | Authorize ID from the Charge API Response / HTTP Notification                                         |
| `payment.capture_amount` | `string` | Optional  | The value of transactions which will be paid by the customer. If undefined, capture full transaction. |

**API Response**

After hitting the above API request, DOKU will give the response.

| Type            | Value   |
| --------------- | ------- |
| **HTTP Status** | 200     |
| **Result**      | SUCCESS |

Here is the sample response header:

```
Client-Id: MCH-0001-10791114622547
Request-Id: b266c265-3d61-4708-9860-c0d5b9a98f8c
Response-Timestamp: 2020-08-11T08:45:42Z
Signature: HMACSHA256=1jap2tpgvWt83tG4J7IhEwUrwmMt71OaIk0oL0e6sPM=
```

<table><thead><tr><th width="199">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><strong><code>client-id</code></strong></td><td>Client ID retrieved from DOKU Back Office</td></tr><tr><td><strong><code>request-id</code></strong></td><td>Unique random string (max 128 characters) generated from merchant side to protect duplicate request</td></tr><tr><td><strong><code>request-timestamp</code></strong></td><td>Timestamp request on UTC time in ISO8601 UTC+0 format. It means to proceed transaction on UTC+7 (WIB), merchant need to subtract time with 7. Ex: to proceed transaction on September 22th 2020 at 08:51:00 WIB, the timestamp should be 2020-09-22T01:51:00Z</td></tr><tr><td><strong><code>signature</code></strong></td><td>Security parameter that needs to be generated on merchant Backend and placed to the header request to ensure that the request is coming from valid merchant. Please refer to <a href="https://developers.doku.com/getting-started-with-doku-api/signature-component/non-snap/signature-component-from-request-header">this section</a> to generate the signature</td></tr></tbody></table>

Here is the sample of response body:

```json
{
    "order": {
        "invoice_number": "INV-20210118-0001",
        "amount": 90000
    },
    "customer": {
        "id": "CUST-0001"
    },
    "payment": {
        "type": "CAPTURE",
        "identifier": [
           {
              "name": "Acquirer",
              "value": "Mandiri"
           },
           {
              "name": "MID",
              "value": "71003372992"
           },
           {
              "name": "TID",
              "value": "73120903"
           }
        ],
        "request_id": "20201026193843836",
        "authorize_id": "12312391719112",
        "response_code": "01",
        "response_message": "sukses transaksi",
        "eci": "05",
        "status": "SUCCESS",
        "approval_code": "123123"
    },
    "three_dsecure": {
        "authentication_id": "eb7e72313b491cd73ea10c6354bc96900f08b3e50e66cf3df2fe29580d6ff84e"
    },
    "card": {
        "masked": "557338*******101",
        "type": "CREDIT",
        "issuer": "Bank Mandiri",
        "brand": "MASTER",
        "token": "243591d7e49f45109961581718c3ef82"
    }
}
```

Response Body Explanation

| Parameter                         | Type     | Mandatory | Description                                                                        |
| --------------------------------- | -------- | --------- | ---------------------------------------------------------------------------------- |
| `order.invoice_number`            | `string` | Mandatory | Same as the request                                                                |
| `order.amount`                    | `number` | Mandatory | Same as the request                                                                |
| `customer.id`                     | `string` | Optional  | Same as the request                                                                |
| `payment.type`                    | `string` | Mandatory | Same as the request                                                                |
| `payment.identifier.name`         | `string` | Mandatory | Additional payment info name                                                       |
| `payment.identifier.value`        | `string` | Mandatory | Additional payment info value                                                      |
| `payment.request_id`              | `string` | Mandatory | Request ID sent on merchant's request header                                       |
| `payment.authorize_id`            | `string` | Mandatory | Authorize ID for authorize transaction. Mandatory if `payment.type` is `AUTHORIZE` |
| `payment.response_code`           | `string` | Mandatory | Reponse code generated by DOKU / Acquirer                                          |
| `payment.response_message`        | `string` | Mandatory | Response message generated by DOKU / Acquirer                                      |
| `payment.status`                  | `string` | Mandatory | <p>Payment status<br>Possible value: <code>SUCCESS, FAILED, PENDING</code></p>     |
| `payment.eci`                     | `string` | Mandatory | ECI for this transaction                                                           |
| `payment.approval_code`           | `string` | Optional  | Approval code for success transaction generated by acquirer                        |
| `three_dsecure.authentication_id` | `string` | Mandatory | Same as the request                                                                |
| `card.masked`                     | `string` | Optional  | Card masked number                                                                 |
| `card.type`                       | `string` | Mandatory | <p>Card type<br>Possible value: <code>CREDIT, DEBIT</code></p>                     |
| `card.issuer`                     | `string` | Mandatory | Card issuer                                                                        |
| `card.brand`                      | `string` | Mandatory | <p>Principal brand<br><code>VISA, MASTER, JCB, AMEX</code></p>                     |
| `card.token`                      | `string` | Optional  | Card token generated by DOKU if `card.save` is `true`                              |

***

### Installment <a href="#installment" id="installment"></a>

{% hint style="info" %}
**Installment ON US**

BCA, Bank Mandiri, BNI only allow for ON US Installment. You must request an Installment MID from each respective acquirer.

**Installment OFF US**

Bukopin, Danamon, Permata, HSBC, OCBC allows OFF US Installment. you must have at least one SALE MID.
{% endhint %}

You can activate installment features on [Service Activation page ](https://dashboard.doku.com/bo/business-account/service) to let your customers pay in terms, you will receive full payment ahead and issuer Bank will charge the customer each month depending on tenor and amount of the transaction.

There are minimal transaction amounts for each installment (depending on the issuer) and you can see the details in the installment configuration page.

{% hint style="success" %}
**Testing Installment Payment**

If you wish to try installment, make sure that you specific bank dummy credit card presented [here](https://sandbox.doku.com/integration/simulator/credit-card) and make sure that your transaction amount is equal to more than the minimum transaction required
{% endhint %}

***

#### Split Settlement <a href="#split-settlement" id="split-settlement"></a>

If you are a platform or a marketplace, you can use this feature to settle the funds to your sellers or partners programmatically, save many operational efforts.

* [Settlement](https://developers.doku.com/accept-payments/finance-and-settlement/split-settlement)

***

### What's next? <a href="#whats-next" id="whats-next"></a>

Make a test payment in the Sandbox environment using the dummy credit card that we have prepared to ensure that your application has been successfully integrated.

* [Click here to see the dummy card list for testing](https://sandbox.doku.com/integration/simulator/credit-card)
