Skip to main content

Travel

Payments made by Indian resident individuals for foreign travel services are classified under the Liberalized Remittance Scheme (LRS), which carries additional checks and regulations. EBANX handles the required checks, helps merchants comply with the regulations automatically, and keeps the flow simple for both merchants and customers.

Requirements

  • API authentication - All API requests must be authenticated using JWS (JSON Web Signature). The legacy integration_key is being deprecated — if you still use it, follow the Migration Guide to transition to JWS. If you don't have credentials yet, complete the Merchant Signup Form.
  • Familiarity with EBANX Direct - This setup follows the same general structure as other payment methods, with a few unique parameters.

LRS travel services

The following services are classified under LRS:

  • Transportation such as flights and trains, with at least one leg outside India.
  • Accommodation such as hotels and stays situated outside India.
  • Tour packages, meaning a combination of transportation and accommodation in a single transaction.
Note

Support for tour packages is in progress and will be available in the near future. At present, only transactions involving one kind of service — either transportation or accommodation — are permitted in a single transaction.

Non-LRS travel: Import classification

The following services are not classified under LRS travel and are processed as regular import transactions:

  • Transportation where both legs (origin and destination) are within India, but the service is provided by a foreign provider.
  • Accommodation situated in India, but the service is provided by a foreign provider.

Automatic compliance handling

EBANX automatically handles the additional checks and regulations that apply to travel payments:

  • PAN (Indian tax ID) - EBANX collects the PAN details from the customer at checkout and validates them.
  • Address - EBANX captures the customer's address required for regulatory reporting.
  • TCS (Tax Collected at Source) - LRS regulations require tax to be collected during a transaction when the customer has breached a certain threshold for the fiscal year. The customer declares at checkout whether the threshold was breached, and EBANX collects the applicable tax and deposits it with the tax authorities through its banking partners.
  • LRS limit checks - LRS regulations cap remittances in foreign currency at USD 250,000 per PAN per fiscal year. EBANX performs this check through its banking partners.

Applicable TCS rates

Type of serviceOverseas spends
<= INR 1,000,000
Overseas spends
> INR 1,000,000
Either accommodation
or transportation
0%20%
Tour packages (accommodation
and transportation together)
2%2%

The overseas spend against a PAN in the fiscal year (April 1 of the current year to March 31 of the next year) used to calculate TCS during transaction processing is based on the customer's declaration at checkout.

Warning
  • The TCS amount, when collected from the customer, is not refunded through a merchant-initiated refund. The customer must claim it as a tax credit when filing an Income Tax Return with the Indian tax authorities.
  • For refunds, add the following statement to the confirmations sent to the customer: "TCS deducted by your bank may be claimed as a tax credit in your Income Tax Return."

How it works

  • Merchant initiates payment - The merchant creates the payment with EBANX, and EBANX responds with a redirect_url.
  • Merchant invokes checkout - The merchant renders the redirect URL and invokes the checkout flow.
  • LRS flow details - The customer enters, verifies, and declares the details required by LRS regulations.
  • Payment method selection - The customer chooses between UPI and cards.
    • For UPI, the customer can scan a QR code or tap to pay using a specific UPI app.
    • For cards, the customer can use a credit or debit card of the Mastercard, Visa, or Rupay networks.
  • Redirection
    • For UPI QR code, the customer scans the QR code with their UPI app, which opens the payment page with pre-filled details.
    • For UPI app, the customer is redirected directly to their chosen UPI app with pre-filled payment details.
    • For cards, the customer enters the card details and is redirected to the authentication page.
  • Authentication
    • In the UPI app, the customer enters their UPI PIN to authorize and complete the transaction.
    • In the cards flow, the customer enters an OTP to authorize and complete the transaction.
  • Payment confirmation - Once the transaction is successful, the customer is redirected to the merchant page defined in the payment request, and the merchant is updated with the transaction status.
  • EBANX notification - EBANX sends a notification to the merchant confirming the successful transaction, allowing the merchant to fulfill the customer's order.

Key information

ItemValue
Minimum amount per transactionINR 1
Maximum amount per transactionINR 2,500,000
Limit for UPI as payment methodINR 100,000
Payment methods supportedUPI and cards
Transaction expiration time30 minutes
Refund date range180 days from the transaction date
Refund turnaround time3 to 10 working days, retries included

Instructions

Follow the steps below.

  1. Select your environment

    Select the appropriate environment for your integration. Use the sandbox environment for testing, or the production environment for live transactions. Use the URL for your HTTP requests based on your selection.

    Check the method's availability for your country and tenant in Payment Methods by Country. Questions about tenant and environment? Check our API Operability and API Endpoints.

    https://sandbox.ebanxpay.com/ws/direct
  2. Basic parameters

    ParameterRequirementDescription
    integration_keyRequiredYour EBANX integration key
    operationRequiredSet to request
    payment.payment_type_codeRequiredSet to lrs-travel for LRS travel related payments
    payment.countryRequiredSet to in for India

    Customer data

    ParameterRequirementDescription
    payment.nameRequiredCustomer's full name
    Note: Minimum 5 characters, alphabets only
    payment.emailRequiredCustomer's email
    payment.phone_numberOptionalCustomer's phone
    Note: Minimum 8 digits, maximum 10 digits, numbers only
    payment.addressOptionalCustomer's address
    Note: Minimum 3 characters
    payment.street_numberOptionalCustomer's street number
    payment.cityOptionalCustomer's city
    Note: Minimum 3 characters, alphabets only
    payment.stateOptionalCustomer's state
    Note: Refer to the states list. Either use the state code or the state name
    payment.zipcodeOptionalCustomer's zipcode or pincode
    Note: Must be 6 digits, numbers only

    Charge parameters

    ParameterRequirementDescription
    payment.merchant_payment_codeRequiredUnique Payment Reference Number as defined by the merchant
    payment.currency_codeRequiredSet to INR
    payment.amount_totalRequiredTotal amount to be charged
    payment.metadata.lrs_typeRequiredSet to flight for transportation and hotel for accommodation related payments
    Note: No other value is allowed
    payment.redirect_urlRequiredCallback URL used to redirect the customer after the transaction is processed
    Note: Used for both successful and failed transactions
  3. Create the payment request

    Request

    Use the following example to initiate a request.

    curl -X POST \
    --location 'https://sandbox.ebanxpay.com/ws/direct' \
    --header 'Content-Type: application/json' \
    --data '{
    "integration_key": "{{integration_key}}",
    "operation": "request",
    "payment": {
    "name": "John Doe",
    "email": "john.doe@example.com",
    "phone_number": "5555555555",
    "address": "123 Main Street",
    "street_number": "100",
    "city": "Capital City",
    "state": "State Name",
    "zipcode": "000000",
    "country": "in",
    "payment_type_code": "lrs-travel",
    "merchant_payment_code": "{{unique_merchant_code}}",
    "currency_code": "INR",
    "amount_total": 99.85,
    "redirect_url": "https://merchant.example.com/callback",
    "metadata": {
    "lrs_type": "flight"
    }
    }
    }'

    Response

    A successful request returns a response like the example below. Extract the redirect_url value and render the checkout by invoking it.

    {
    "payment": {
    "hash": "59acc5f00945fa382ab051651440826da7701533249b3a475",
    "country": "in",
    "merchant_payment_code": "{{unique_merchant_code}}",
    "order_number": null,
    "status": "PE",
    "status_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "open_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "confirm_date": null,
    "transfer_date": null,
    "amount_br": "99.85",
    "amount_ext": "99.85",
    "amount_iof": "1",
    "currency_rate": "1",
    "currency_ext": "INR",
    "due_date": "{{YYYY-MM-DD}}",
    "instalments": "1",
    "payment_type_code": "lrs-travel",
    "redirect_url": "https://sandbox.ebanxpay.com/ws/redirect?hash=59acc5f00945fa382ab051651440826da7701533249b3a475",
    "pre_approved": false,
    "capture_available": null
    },
    "status": "SUCCESS",
    "redirect_url": "https://sandbox.ebanxpay.com/ws/redirect?hash=59acc5f00945fa382ab051651440826da7701533249b3a475"
    }
  4. Monitor the payment for status changes

    At this stage, the payment appears as pending (PE) in your Merchant Area.

    Notifications

    EBANX sends a notification whenever a payment status changes. Make sure your system is set up to receive notifications from EBANX.

    Status

    After receiving a notification that the status has changed, retrieve the payment status. When a payment is confirmed, the status changes from pending (PE) to confirmed (CO). If the customer does not complete the payment, the status eventually changes to cancelled (CA).

    Request

    curl -X POST \
    --location 'https://sandbox.ebanxpay.com/ws/query' \
    --header 'Content-Type: application/json' \
    --data '{
    "integration_key": "{{integration_key}}",
    "hash": "59acc5f00945fa382ab051651440826da7701533249b3a475"
    }'

    Response for a payment completed with UPI

    {
    "payment": {
    "hash": "59acc5f00945fa382ab051651440826da7701533249b3a475",
    "country": "in",
    "merchant_payment_code": "{{unique_merchant_code}}",
    "order_number": null,
    "status": "CO",
    "status_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "open_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "confirm_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "transfer_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "amount_br": "99.85",
    "amount_ext": "99.85",
    "amount_iof": "1",
    "currency_rate": "1",
    "currency_ext": "INR",
    "due_date": "{{YYYY-MM-DD}}",
    "instalments": "1",
    "payment_type_code": "lrs-travel",
    "redirect_url": "https://sandbox.ebanxpay.com/ws/redirect?hash=59acc5f00945fa382ab051651440826da7701533249b3a475",
    "pre_approved": false,
    "capture_available": null,
    "metadata": {
    "payment_method": "upi",
    "payment_sub_type": "link",
    "instrument_type": "UPI",
    "order_amount": "99.85",
    "tcs_amount": "1",
    "bank_reference_id": "{{bank_reference_id}}"
    }
    },
    "status": "SUCCESS"
    }

    Response for a payment completed with cards

    {
    "payment": {
    "hash": "59acc5f00945fa382ab051651440826da7701533249b3a475",
    "country": "in",
    "merchant_payment_code": "{{unique_merchant_code}}",
    "order_number": null,
    "status": "CO",
    "status_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "open_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "confirm_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "transfer_date": "{{YYYY-MM-DD HH:mm:ss}}",
    "amount_br": "99.85",
    "amount_ext": "99.85",
    "amount_iof": "1",
    "currency_rate": "1",
    "currency_ext": "INR",
    "due_date": "{{YYYY-MM-DD}}",
    "instalments": "1",
    "payment_type_code": "lrs-travel",
    "redirect_url": "https://sandbox.ebanxpay.com/ws/redirect?hash=59acc5f00945fa382ab051651440826da7701533249b3a475",
    "pre_approved": false,
    "capture_available": null,
    "metadata": {
    "payment_method": "card",
    "payment_sub_type": "credit_card",
    "instrument_type": "mastercard",
    "order_amount": "99.85",
    "tcs_amount": "1",
    "bank_reference_id": "{{bank_reference_id}}"
    }
    },
    "status": "SUCCESS"
    }
  5. Read the metadata section

    The metadata node is returned only for confirmed (CO) payments and describes how the customer actually paid. Fields with no value are omitted.

    FieldDescription
    payment_methodPayment method used by the customer: upi or card
    payment_sub_type1. For UPI, link for the UPI intent flow or qrcode for the UPI QR flow.
    2. For cards, credit_card or debit_card.
    instrument_type1. For UPI, the underlying account used:
        a. UPI for a bank account (savings or current).
        b. UPI_Credit_Card for a Rupay credit card.
        c. UPI_PPI for a prepaid instrument.
        d. UPI_Credit_Line for a credit line extended by the bank on the account.
    2. For cards, the card network: Mastercard, Visa, or Rupay.
    order_amountAmount sent in the payment request, plus the TCS collected from the customer
    tcs_amountTax collected at source based on the customer's declaration. 0 means the customer declared no breach of the TCS threshold; a value greater than 0 means the customer confirmed the threshold was breached for the fiscal year
    bank_reference_idTransaction reference ID generated at the bank. It is the common transaction identifier between the customer and the merchant at the processing level
  6. Congratulations!

    You have successfully integrated Travel.

    For more information, refer to the
    Direct API reference guidechevron_right

Expected error codes

Travel payments are processed through UPI or cards, so the error codes are the ones already documented for each payment method:

Resources

Use the following resources when testing in your sandbox environment.

Still need help?

Help Image

We hope this article was helpful. If you still have questions, you can explore the following options: