Skip to main content

Introduction

Every credit into a VBA creates a payment in Action Required. Under the Liberalised Remittance Scheme (LRS), you make it compliant by asserting who the remitter is, why they are paying, and that the required tax and documents are in place. This guide walks the four LRS APIs in order.
PSP callers must send X-Merchant-ID on every LRS call, naming the settling sub-merchant — LRS is always scoped to the settling entity, never the PSP.
New to the LRS rules, declarations, and required documents? Read LRS & Compliance first — this page is the API walk-through.

Step 1: Verify the Buyer’s PAN

The remitter is identified by PAN, not by the bank sender on the credit. Verifying the PAN checks it against income-tax records and matches the name and date of birth. A verified PAN is the gateway to everything else, so do this first — a mismatch is a guaranteed bank rejection later.
curl -X POST 'https://api-pacb-uat.eximpe.com/pg/pan/verify/' \
  -H 'X-Client-ID: <client_id>' -H 'X-Client-Secret: <client_secret>' \
  -H 'X-Merchant-ID: <sub_merchant_id>' -H 'X-API-Version: 3.0.0' \
  -H 'Content-Type: application/json' \
  -d '{ "pan": "ABCDE1234F", "name": "John Doe", "dob": "1990-01-01" }'
A non-matching or rejected PAN returns verified: false with a reason (e.g. NAME_MISMATCH, INOPERATIVE_PAN) to resolve with the buyer before proceeding.

📚 API Reference

Verify PAN API — full request/response, statuses, and reasons.

Step 2: Quote the TCS

Show the buyer a complete, tax-inclusive amount before they pay. The quote returns the TCS due and the all-in total to collect. For education from the buyer’s own funds, TCS is 2% on the amount above ₹10,00,000 of the remitter’s cumulative LRS this financial year — the first ₹10 lakh each year is TCS-free. This quotes against the LRS usage EximPe can see and reserves nothing, so you can re-quote freely.
curl -X POST 'https://api-pacb-uat.eximpe.com/pg/lrs/quote/' \
  -H 'X-Client-ID: <client_id>' -H 'X-Client-Secret: <client_secret>' \
  -H 'X-Merchant-ID: <sub_merchant_id>' -H 'X-API-Version: 3.0.0' \
  -H 'Content-Type: application/json' \
  -d '{ "pan": "ABCDE1234F", "amount": 1200000, "purpose_code": "S0305", "tcs_threshold_breached": false }'
The purpose_code must be one your settling entity is enabled for (its allowlist).

📚 API Reference

Quote LRS Amount API — TCS breakdown and threshold flags.

Step 3: Upload Supporting Documents

Upload each supporting document up front — decoupled from any payment. Each upload returns a ref you pass in the next step. This is a multipart/form-data request with a file and a type.
curl -X POST 'https://api-pacb-uat.eximpe.com/pg/lrs/documents/' \
  -H 'X-Client-ID: <client_id>' -H 'X-Client-Secret: <client_secret>' \
  -H 'X-Merchant-ID: <sub_merchant_id>' -H 'X-API-Version: 3.0.0' \
  -F 'type=offer_letter' \
  -F 'file=@offer_letter.pdf'
Document type values depend on the purpose code — e.g. offer_letter, fee_invoice, passport, relationship_declaration, student_id_or_visa. See the document matrix for which documents each purpose code requires.

📚 API Reference

Upload LRS Document API — accepted types and validation.

Step 4: Submit Verification Details

Finally, submit the remaining details for the payment: the remitter, purpose code, invoice, address, contact, declarations, collected TCS, and the document refs. EximPe runs the checks (declarations, documents, sender-name match, TCS, money-match), posts the payment to the buyer’s LRS counter, and advances it.
curl -X POST 'https://api-pacb-uat.eximpe.com/pg/lrs/verify/' \
  -H 'X-Client-ID: <client_id>' -H 'X-Client-Secret: <client_secret>' \
  -H 'X-Merchant-ID: <sub_merchant_id>' -H 'X-API-Version: 3.0.0' \
  -H 'Content-Type: application/json' \
  -d '{
    "payment_id": "PAY_1a2b3c4d5e",
    "purpose_code": "S0305",
    "remitter": { "pan": "ABCDE1234F", "name": "John Doe", "dob": "1990-01-01", "relation": "SELF" },
    "invoice": { "number": "INV-2025-0091", "date": "2025-07-01", "amount": 1200000 },
    "address": { "address1": "12 MG Road", "city": "Bengaluru", "state": "Karnataka", "pincode": "560001" },
    "contact": { "email": "[email protected]", "mobile": "9876543210" },
    "tcs": 4000,
    "declarations": { "resident_in_india": true, "lrs": true, "tcs": true, "source_of_funds": true },
    "documents": [ { "type": "offer_letter", "ref": "<ref-from-step-3>" } ]
  }'
The response reports the resulting state:
statusMeaning
under_reviewChecks passed; posted to the LRS counter and awaiting bank processing.
action_requiredSomething is missing — see the missing array and outstanding amount, fix, and resubmit.
on_holdNeeds manual attention (e.g. the sender is not the PAN holder).
When the remitter’s relation is not SELF (e.g. a parent paying for a student), you must also include primary_person (name, dob, passport number) for the person the remittance is for.
Topping up an earlier payment? Pass linked_payment_id and a reason (REMAINING_AMOUNT or TCS_PAYMENT) on submit. reason is only valid together with linked_payment_id.

📚 API Reference

Submit LRS Verification API — full payload, checks, and result statuses.

After Submission

Once the payment clears review, funds are settled to the beneficiary abroad. Track settlement via the Settlement APIs and the Payment Settled webhook.