Exporting to International Customers Preview

    Process transactions where the good or service sold will be consumed outside of India.

    By providing certain additional information while onboarding and in API requests, Indian users can process export transactions for goods or services that will be consumed outside of India.

    At the moment, we only support export of services by registered Indian businesses (i.e. sole proprietorships, limited liability partnerships and companies but not individuals) up to a maximum of $10,000 USD per transaction.

    Onboarding

    To enable export transactions, you must do the following when submitting your account application:

    1. Opt in to exports: In the account application, check the applicable box under the ‘I am exporting products to customers located outside India’ section. If you do not opt in, you will only be able to make export charges in test mode.

    2. Submit your importer/exporter code (IEC). The IEC is a code issued by the Indian Director General of Foreign Trade (DGFT) to Indian companies that intend to export from India. You can find FAQs on the IEC at the DGFT website or find steps to apply online.

    3. Specify a transaction purpose code. The transaction purpose code describes the nature of a payment received in foreign currency. The list of valid transaction purpose codes is maintained by the Reserve Bank of India (RBI). You must select the code which is closest to your product from the drop-down on the account application.

    The list of transaction purpose codes supported by Stripe is copied below.

    Opting in or updating export details after account activation

    You may opt into exports, change the IEC or change your transaction purpose code after the onboarding process at the Dashboard.

    A Stripe account can only have a single transaction purpose code.

    Valid charges

    To process export charges, a merchant will need to pass through the buyer’s name, address, and description to Stripe for regulatory reporting.

    In addition, all export charges must meet the criteria below, or the charges will be declined:

    • Charge must be presented in a non-Indian Rupee (INR) currency
    • Customer must input a non-Indian address
    • Customer must pay with cards issued outside India

    Payouts

    Funds from domestic and export transactions are paid out separately by Stripe. If you process both domestic and export payments, you may have two payouts on the same day. The balance from export transactions is labelled International when you view payouts in the Dashboard.

    Accepting an export card payment

    Every export payment is required to have the buyer’s name, address and a description of the service being exported.

    This information is required by our financial partners.

    Payment Intents

    This section assumes that you are familiar with accepting payments using the Payment Intents API.

    To make the export declaration and furnish the required information, you need to create or update the PaymentIntent with buyer’s name, address and description:

    curl https://api.stripe.com/v1/payment_intents \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d description="Software development services" \ -d "shipping[name]"="Jenny Rosen" \ -d "shipping[address][line1]"="510 Townsend St" \ -d "shipping[address][postal_code]"=98140 \ -d "shipping[address][city]"="San Francisco" \ -d "shipping[address][state]"=CA \ -d "shipping[address][country]"=US \ -d amount=1099 \ -d currency=usd \ -d "payment_method_types[]"=card
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' Stripe::PaymentIntent.create({ description: 'Software development services', shipping: { name: 'Jenny Rosen', address: { line1: '510 Townsend St', postal_code: '98140', city: 'San Francisco', state: 'CA', country: 'US', } }, amount: 1099, currency: 'usd', payment_method_types: ['card'], })
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' stripe.PaymentIntent.create( description='Software development services', shipping={ 'name': 'Jenny Rosen', 'address': { 'line1': '510 Townsend St', 'postal_code': '98140', 'city': 'San Francisco', 'state': 'CA', 'country': 'US', } }, amount=1099, currency='usd', payment_method_types=['card'], )
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); stripe.paymentIntents.create({ description: 'Software development services', shipping: { name: 'Jenny Rosen', address: { line1: '510 Townsend St', postal_code: '98140', city: 'San Francisco', state: 'CA', country: 'US', } }, amount: 1099, currency: 'usd', payment_method_types: ['card'], })

    That’s it! This payment has been declared as an export, and will be included in the monthly payment advice generated at the end of the month.

    See below for alternative ways of declaring the name and address.

    Fighting fraud

    Export card payments do not require 3D Secure and hence have a higher risk of fraud. Stripe Radar is our suite of modern tools that uses machine learning to detect and block fraudulent payments. It’s fully integrated into your payments flow and you can start using it without any additional development time. Additional features include rules for blocking payments based upon your own business logic and reviews of unusual payments that have an elevated risk of fraud.

    Charges

    Similarly, if you are using Charge API, provide the buyer’s name, address and the description of the service when making the API call:

    curl https://api.stripe.com/v1/charges \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d amount=1099 \ -d currency=usd \ -d "shipping[name]"="Jenny Rosen" \ -d "shipping[address][line1]"="510 Townsend St" \ -d "shipping[address][postal_code]"=98140 \ -d "shipping[address][city]"="San Francisco" \ -d "shipping[address][state]"=CA \ -d "shipping[address][country]"=US \ -d description="Software development services" \ -d source=tok_visa
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' Stripe::Charge.create({ amount: 1099, currency: 'usd', description: 'Software development services', shipping: { name: 'Jenny Rosen', address: { line1: '510 Townsend St', postal_code: '98140', city: 'San Francisco', state: 'CA', country: 'US', } }, source: 'tok_visa', })
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' stripe.Charge.create( amount=1099, currency='usd', description='Software development services', shipping={ 'name': 'Jenny Rosen', 'address': { 'line1': '510 Townsend St', 'postal_code': '98140', 'city': 'San Francisco', 'state': 'CA', 'country': 'US', } }, source='tok_visa', )
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); stripe.charges.create({ amount: 1099, currency: 'usd', description: 'Software development services', shipping: { name: 'Jenny Rosen', address: { line1: '510 Townsend St', postal_code: '98140', city: 'San Francisco', state: 'CA', country: 'US', } }, source: 'tok_visa', })

    Accepting recurring export card payments (Stripe Billing)

    This section assumes that you are familiar with Billing to create (and bill) your customers via Subscriptions and Invoices.

    The only change you need is to provide a buyer’s name and an address.

    curl https://api.stripe.com/v1/customers \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d name="Jenny Rosen" \ -d "address[line1]"="510 Townsend St" \ -d "address[postal_code]"=98140 \ -d "address[city]"="San Francisco" \ -d "address[state]"=CA \ -d "address[country]"=US
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' Stripe::Customer.create({ name: 'Jenny Rosen', address: { line1: '510 Townsend St', postal_code: '98140', city: 'San Francisco', state: 'CA', country: 'US', } })
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' stripe.Customer.create( name='Jenny Rosen', address={ 'line1': '510 Townsend St', 'postal_code': '98140', 'city': 'San Francisco', 'state': 'CA', 'country': 'US', } )
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); stripe.customers.create({ name: 'Jenny Rosen', address: { line1: '510 Townsend St', postal_code: '98140', city: 'San Francisco', state: 'CA', country: 'US', } })

    You do not have to provide a description, because Stripe will generate one from the description on your invoice items. Therefore, you should ensure that the description on your invoice items accurately reflects your product:

    curl https://api.stripe.com/v1/invoiceitems \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d customer=cus_Ej0c314UoUXBgX \ -d amount=2500 \ -d currency=usd \ -d description="One-time setup fee"
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' Stripe::InvoiceItem.create({ customer: 'cus_Ej0c314UoUXBgX', amount: 2500, currency: 'usd', description: 'One-time setup fee', })
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' stripe.InvoiceItem.create( customer='cus_Ej0c314UoUXBgX', amount=2500, currency='usd', description='One-time setup fee', )
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); stripe.invoiceItems.create({ customer: 'cus_Ej0c314UoUXBgX', amount: 2500, currency: 'usd', description: 'One-time setup fee', })

    Subscription best practices

    When selling to international customers, 3D Secure is not mandatory. You may notice a higher dispute rate than when you were selling to Indian customers.

    We often see disputes from customers claiming that they were charged even after they cancelled their subscription. Here are some best practices to avoid these disputes:

    • Make it clear on your signup page that your customers are agreeing to a recurring payment and include information about whether or not you plan to notify the customer before each payment. Make sure cancellation procedures are clearly communicated to your customers, and clearly state the window in which a subscription can be canceled. Include copies of these procedures in a visible terms of service page.
    • If offering a free or discounted trial period, be sure to clearly communicate the length of the trial and the date full price billing will occur. You should also clearly display the amount of the standard pricing above the payment button on your checkout page.
    • Cancel subscriptions within two business days of initial request, making sure to pass the cancellation along to Stripe if you use our subscription functionality. Per card network rules, you may also only make eight attempts per card after an initial decline, so be sure to close out any subscriptions that have already reached this limit. Provide your customer with a confirmation of the cancellation.
    • Have a clear way for customers to contact you if requesting cancellation. If customers have questions about their subscription, they are more likely to submit a dispute if you are difficult to reach. You can track your overall dispute activity under the Analytics section in your Dashboard.

    Learn more about dispute prevention and common reasons why cardholders file disputes.

    Monthly payment advice for export transactions

    We will provide you with a monthly payment advice that you can download on the Dashboard. The payment advice will include the list of all the export charges executed that month.

    Transaction Purpose Code Listing

    Below is a list of the Transaction Purpose Codes that currently can be selected in onboarding. If you need to use a Transaction Purpose Code that’s not in this list, please contact support-in@stripe.com.

    Code Description
    P0213 Receipts on account of other transportation services (stevedoring, demurrage, port handling charges etc)..
    P0301 Purchases towards travel (Includes purchases of foreign TCs, currency : notes etc over the counter, by hotels, hospitals, Emporiums, Educational institutions etc. as well as amount received bv TT/SWIFT transfers or debit ..
    P0401 Postal services.
    P0402 Courier services.
    P0403 Telecommunication services.
    P0404 Satellite services.
    P0501 Receipts for cost of construction of services projects in India.
    P0601 Receipts of life insurance premium.
    P0602 Receipts of freight insurance - relating to import & export of goods.
    P0603 Receipts on account of other general insurance premium.
    P0604 Receipts of Reinsurance premium.
    P0605 Receipts on account of Auxiliary services (commission on Insurance).
    P0606 Receipts on account of settlement of claims.
    P0701 Financial intermediation except investment banking - Bank charges, collection charges, LC charges, cancellation of forward contracts, commission on financial leasing etc..
    P0702 Investment banking - brokerage, underwriting commission etc..
    P0703 Auxiliary services - charges on operation & regulatory fees, custodial services, depository services etc..
    P0801 Hardware consultancy.
    P0802 Software implementation/consultancy (other than those covered in SOFTEX form).
    P0803 Data base, data processing charges.
    P0804 Repair and maintenance of computer and software.
    P0805 Mews agency services.
    P0806 Other information services - Subscription to newspapers, periodicals, etc.
    P0807 Off-site Software Exports
    P0901 Franchises services - patents.copy rights, trade marks, industrial processes, franchises etc.
    P0902 Receipts for use, through licensing arrangements, of produced originals or prototypes (such as manuscripts and films).
    P1001 Merchanting Services – net receipts (from sale and purchase of goods without crossing the border).
    P1002 Trade related services - Commission on exports/imports.
    P1004 Legal services.
    P1005 Accounting, auditing, book keeping and tax consulting services.
    P1006 Business and management consultancy and public relations services.
    P1007 Advertising, trade fair, market research and public opinion polling services.
    P1008 Research & Development services.
    P1009 Architectural, engineering and other technical services.
    P1010 Agricultural, mining and on -site processing services - protection against insects & disease, increasing of harvest yields, forestry services, mining services like analysis of ores etc.
    P1012 Distribution services.
    P1013 Environmental services.
    P1019 Other services not included elsewhere.
    P1101 Audio-visual and related services -services and associated fees related to production of motion pictures, rentals, fees received by actors, directors, producers and fees for distribution rights..
    P1102 Personal, cultural services such as those related to museums, libraries, archives and sporting activities and fees for correspondence courses of Indian Universities/Institutes.
    P1301 Inward remittance from Indian nonresidents towards family maintenance and savings.
    P1302 Personal gifts and donations .
    P1303 Donations to religious and charitable institutions in India.
    P1304 Grants and donations to governments and charitable institutions established by the governments.
    P1306 Receipts / Refund of taxes.
    P1590 Receipts below $10,000 (say ₹5,00,000).

    Alternative ways to declare an export customer’s name and address

    The export customer’s name and address do not have to be declared at the PaymentIntent or Charge. They may be declared at the Source or Customer, especially if you prefer to save and re-use the information.

    Declaration at the Source

    If you do not wish to submit the customer’s address while creating the PaymentIntent/Charge, you may submit the name and address together with the Source:

    var stripe = Stripe('pk_test_TYooMQauvdEDq54NiTphI7jx'); stripe.confirmCardPayment( '{PAYMENT_INTENT_CLIENT_SECRET}', { payment_method: { card: cardElement, billing_details: { name: 'Jenny Rosen', address: { line1: '510 Townsend St', city: 'San Francisco', state: 'CA', postal_code: '98140', country: 'US' } } } } ).then(function(result) { // Handle result.error or result.paymentIntent });

    Declaration at the Customer

    Or, you could also submit the name and address by saving them on a Customer:

    curl https://api.stripe.com/v1/customers \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d name="Jenny Rosen" \ -d "address[line1]"="510 Townsend St" \ -d "address[postal_code]"=98140 \ -d "address[city]"="San Francisco" \ -d "address[state]"=CA \ -d "address[country]"=US
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' Stripe::Customer.create({ name: 'Jenny Rosen', address: { line1: '510 Townsend St', postal_code: '98140', city: 'San Francisco', state: 'CA', country: 'US', } })
    # Set your secret key: remember to change this to your live secret key in production # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' stripe.Customer.create( name='Jenny Rosen', address={ 'line1': '510 Townsend St', 'postal_code': '98140', 'city': 'San Francisco', 'state': 'CA', 'country': 'US', } )
    // Set your secret key: remember to change this to your live secret key in production // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); stripe.customers.create({ name: 'Jenny Rosen', address: { line1: '510 Townsend St', postal_code: '98140', city: 'San Francisco', state: 'CA', country: 'US', } })

    Was this page helpful?

    Thank you for helping improve Stripe's documentation. If you need help or have any questions, please consider contacting support.

    On this page