--- title: "Merchant initiated and recurring flagging" slug: "merchant-initiated-transaction-2" updated: 2025-10-02T05:57:11Z published: 2025-10-02T05:57:11Z canonical: "docs.xendit.co/merchant-initiated-transaction-2" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.xendit.co/llms.txt > Use this file to discover all available pages before exploring further. # Merchant initiated and recurring flagging > [!WARNING] > Merchant initiated transactions require additional approval from our risk team > > Due to the high risk of fraud, we by default do not allow merchant initiated transactions to take place. To enable merchant initiated transactions, request recurring payments from from the [Xendit Dashboard](https://dashboard.xendit.co/settings/payment-methods/cards-configuration). This guide describes how to charge merchant initiated transactions (with recurring indicators) **without using Xendit issued tokens**. ## Merchant initiated transaction indicators There are several fields that can be used for recurring flagging: ### Card on file type ```json "channel_properties": {    "card_on_file_type": "RECURRING", "MERCHANT_UNSCHEDULED", "CUSTOMER_UNSCHEDULED" } ``` `card_on_file_type` - can have the following values: **RECURRING** - This transaction is expected to happen on a recurring basis, subscriptions to a service, for example. **MERCHANT_UNSCHEDULED** - This transaction can happen any time, at different amounts, whenever the merchant initiates the transaction. **CUSTOMER_UNSCHEDULED** - Use for tokenized cards ([Pay and save](/docs/create-a-token)) ### Transaction sequence ```json "channel_properties": {     "transaction_sequence": "INITIAL", "SUBSEQUENT" ``` `transaction_sequence` - can have the following values: **INITIAL** - first time transaction **SUBSEQUENT** - any follow up transaction, also used when switching between providers ### Recurring configuration For recurring transactions, additional configuration is required, both `recurring_expiry` and `recurring_frequency` are scheme mandated fields ```json "channel_properties": {    "recurring_configuration" : {        "recurring_expiry": "YYYY-MM-DD", // The expiry date of the contract        "recurring_frequency": 30 // The days in between each charge, for unscheduled pass "1"    } } ``` ## Initial unscheduled merchant initiated transaction The first transaction of a merchant initiated transaction requires the transaction to be flagged as **INITIAL**: `transaction_sequence : "INITIAL"` - the first time we are setting up the “contract” between the shopper and your product. **Perform the payment request:** Set up an unscheduled merchant initiated transaction (customer initiated, first time): Request - POST /v3/payment_requests ```json {  "reference_id": "UNIQUE_REFERENCE_ID",  "type": "PAY",  "country": "ID",  "currency": "IDR",  "request_amount": 10000,  "capture_method": "AUTOMATIC",  "channel_code": "CARDS",  "customer": {        "reference_id": "UNIQUE_CUSTOMER_REFERENCE_ID",        "type": "INDIVIDUAL",        "email": "test@yourdomain.com",        "mobile_number": "+6212345678",        "individual_detail": {            "given_names": "Lorem",            "surname": "Ipsum"        }    },    "channel_properties": {        "card_details": {                "card_number": "4000000000001091",                "cvn": "123",                "cardholder_first_name": "shopperFirstName",                "cardholder_last_name": "shopperLastName",                "cardholder_email": "shopper@shopper.co",                "expiry_month": "12",                "expiry_year": "2029"        },        "card_on_file_type": "MERCHANT_UNSCHEDULED",        "transaction_sequence":"INITIAL",        "skip_three_ds": false // We recommend not to skip 3DS (risk and liability)    },    "failure_return_url": "https://xendit.co/failure",    "success_return_url": "https://xendit.co/success",    "statement_descriptor": "New PC",    "description": "Your description",    "metadata": {        "metametadata": "Any meta data"    } } ``` ## Subsequent transactions Follow up transactions has to be flagged **SUBSEQUENT** We have created a “contract” between the shopper and the merchant and are now charing a previously stored card. For subsequent transactions make sure to pass the `card_on_file_type` , `network_transaction_id` in the `channel_properties` object ```json "channel_properties": {        "success_return_url": null,        "failure_return_url": null,        "card_on_file_type": "RECURRING",        "network_transaction_id": "1251251511" ... ``` > [!NOTE] > **Alphanumeric Network transaction ID resulting in error** > > On test, the returned network_transaction_id is alphanumeric. This reflects actual network_transaction_id’s. > > When using this network_transaction_id, it will result in processor error. > > To circumvent this issue on test, pass a numeric character (can be random); 12123456789012 **Merchant unscheduled transaction sample** Sample request to follow up the merchant unscheduled transaction: Request - POST /v3/payment_requests ```json {  "reference_id": "UNIQUE_REFERENCE_ID",  "type": "PAY",  "country": "ID",  "currency": "IDR",  "request_amount": 115100,  "capture_method": "AUTOMATIC",  "channel_code": "CARDS",  "customer": {        "reference_id": "UNIQUE_CUSTOMER_REFERENCE_ID",        "type": "INDIVIDUAL",        "email": "test@yourdomain.com",        "mobile_number": "+6212345678",        "individual_detail": {            "given_names": "Lorem",            "surname": "Ipsum"        }    },    "channel_properties": {        "card_details": {                "card_number": "4000000000001091",                "cardholder_first_name": "shopperFirstName",                "cardholder_last_name": "shopperLastName",                "cardholder_email": "shopper@shopper.co",                "expiry_month": "12",                "expiry_year": "2029"        },        "card_on_file_type": "MERCHANT_UNSCHEDULED",        "transaction_sequence":"SUBSEQUENT",        "network_transaction_id": "1251251511", // numerical on test    },    "failure_return_url": "https://xendit.co/failure",    "success_return_url": "https://xendit.co/success",    "statement_descriptor": "testing goodds",    "description": "this should have the proper ntid",    "metadata": {        "metametadata": "metametametadata"    } } ``` ## Initial recurring transaction First time recurring transaction. Ideally we do request 3DS2 for a first time recurring contract: 1. **Create the payment request with the** [**recurring configuration**](/docs/merchant-initiated-transaction-2#recurring-configuration) **in place** Request - POST /v3/payment_requests ```json {  "reference_id": "UNIQUE_REFERENCE_ID",  "type": "PAY",  "country": "ID",  "currency": "IDR",  "request_amount": 10000,  "capture_method": "AUTOMATIC",  "channel_code": "CARDS",  "customer": {        "reference_id": "UNIQUE_CUSTOMER_REFERENCE_ID",        "type": "INDIVIDUAL",        "email": "test@yourdomain.com",        "mobile_number": "+6212345678",        "individual_detail": {            "given_names": "Lorem",            "surname": "Ipsum"        }    },    "channel_properties": {        "recurring_configuration": {            "recurring_expiry": "2028-12-10",            "recurring_frequency" : 30        },        "card_details": {                "card_number": "4000000000001091",                "cvn": "123",                "cardholder_first_name": "Shopper",                "cardholder_last_name": "LastName",                "cardholder_email": "example@shopper.com",                "expiry_month": "12",                "expiry_year": "2029"        },        "card_on_file_type": "RECURRING",        "transaction_sequence":"INITIAL",        "failure_return_url": "https://xendit.co/failure",        "success_return_url": "https://xendit.co/success"    },    "statement_descriptor": "30 day subscription",    "description": "Recurring sample" } ``` 1. **Redirect to the authentication page** Redirect your customer to the [authentication page](/docs/authentication-3ds2) provided by the `action_url` from the response object. This is where the cardholder completes the 3D Secure authentication. 2. **Fetch the transaction details and store the** `network_transaction id` Follow [this guide](/docs/retrieving-authorization-and-decline-details) to retrieve the payment details. > [!NOTE] > **Alphanumeric Network transaction ID resulting in error** > > On test, the returned network_transaction_id is alphanumeric. This reflects actual network_transaction_id’s. > > When using this network_transaction_id, it will result in processor error. > > To circumvent this issue on test, pass a numeric character (can be random); 12123456789012 ## Follow up recurring transaction The follow up transaction would (in this case) be expected to be charged 30 days later. 1. **Create the follow up payment request with the network_transaction_id field** Request - POST /v3/payment_requests ```json {  "reference_id": "UNIQUE_REFERENCE_ID",  "type": "PAY",  "country": "ID",  "currency": "IDR",  "request_amount": 50000,  "capture_method": "AUTOMATIC",  "channel_code": "CARDS",  "customer": {        "reference_id": "UNIQUE_CUSTOMER_REFERENCE_ID",        "type": "INDIVIDUAL",        "email": "test@yourdomain.com",        "mobile_number": "+6212345678",        "individual_detail": {            "given_names": "Lorem",            "surname": "Ipsum"        }    },    "channel_properties": {        "card_details": {                "card_number": "4000000000001091",                "cardholder_first_name": "Shopper",                "cardholder_last_name": "Name",                "cardholder_email": "example@shopper.com",                "expiry_month": "12",                "expiry_year": "2029"        },        "card_on_file_type": "RECURRING",        "transaction_sequence":"SUBSEQUENT",        "skip_three_ds": true,        "network_transaction_id": "12123456789012"    },    "statement_descriptor": "Your subscription",    "description": "Recurring MIT follow up transaction" } ``` 1. **This transaction has now been authorized.** Make sure to receive the [webhook or fetch the transaction details](/docs/retrieving-authorization-and-decline-details)