{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Collect LRS remittances from India","siteUrl":"https://docs.glomo.one","llmstxt":{"title":"Glomo developer documentation","description":"Cross-border payments APIs, organised by product. Each product section carries both the explanation of its objects and the job-shaped integration guides that set them up.","details":{"content":"How to use these docs:\n\n- Get started is the front door. It has one section per integration\n  (what you're building), each with the API calls in order and the guide that builds it, plus\n  how to get API keys.\n- The product sections - Payin, Payout, Multi-currency accounts,\n  Verification, Request for Information (RFI) - each hold two kinds of page.\n  Pages titled as a noun (\"Subscriptions\", \"Bank Transfer\") explain what\n  an object is. Pages titled as a job (\"Set up recurring subscriptions\",\n  \"Collect LRS remittances from India\") are complete integration flows\n  and live one level under the object they set up. Match a user's goal\n  against the job-shaped titles first.\n- Reports and Identity and Access Management are the two subjects with no\n  API counterpart. There are no endpoints for reports, users, roles or\n  invites; both pages document the merchant dashboard. A dashboard\n  procedure for something the API also does (a refund, a payout) is NOT\n  here - it stays in the product that owns it.\n- API reference is generated from OpenAPI and carries endpoint detail.\n- The OpenAPI description itself is published as a single self-contained\n  document at /openapi.yaml, and the same document as JSON at\n  /openapi.json. Every $ref is resolved into it, so one fetch is the\n  whole contract: 61 paths, 81 operations, 68 schemas - the same\n  endpoints the API reference pages render. Fetch that instead of\n  reading the 129 pages under /api-reference/.\n- Every page below, in full, is one document at /llms-full.txt. Fetch that\n  instead of the pages one by one. It leaves out the API reference;\n  /openapi.yaml is that.\n- Developer resources covers what every integration touches and no single\n  product owns: auth, errors, pagination, rate limits, webhooks,\n  versioning, supported countries, quotes, the MCP server for AI\n  agents, and the client SDKs.\n"},"sections":[{"title":"Get started","description":"The front door. The ordered API calls for each integration and the guide that delivers it, how to obtain API keys, and the platform glossary.","includeFiles":["**/get-started/**"]},{"title":"Payin","description":"Collecting money: customers, orders, checkout, payment links, payment methods (cards, bank transfer, pay via bank), refunds, disputes, purpose codes, fee models, custom fields, subscriptions, and resident India remittance under LRS. Includes the flows that set each up - bank transfers, subscriptions, LRS remittances, and server-to-server card payments.","includeFiles":["**/payin/**"]},{"title":"Payout","description":"Sending money: the payout life cycle, queued payouts, creating and cancelling a payout, rails, beneficiaries, purpose codes, and the action required state. Includes the flow that sends a payout over the API.","includeFiles":["**/payout/**"]},{"title":"Multi-currency accounts","description":"Holding money: balances, balance conversion, adding balance, and withdrawing balance.","includeFiles":["**/multi-currency-account/**"]},{"title":"Verification","description":"Proving who someone is and that an account is theirs: KYC, bank account validation, and third-party verification (TPV) with the flow that verifies a payer's bank account.","includeFiles":["**/verification/**"]},{"title":"Request for Information (RFI)","description":"Responding to a compliance request for information, per object - payment link, order, payment, payout - plus compliance reviews and RFIs raised on already-successful payments.","includeFiles":["**/request-for-information/**"]},{"title":"Nivo (Capital markets)","description":"Nivo, Glomo's capital markets suite (Nivo for AMCs, Nivo for Distributors, and overseas investing for brokers and wealth platforms). Mutual fund investments run as payment sessions: the fund, distributor, scheme, plan, ARN and folio roles; the distributor's relationship with a fund and what it fixes; and the flow that opens a session as a distributor.","includeFiles":["**/capital-markets/**"]},{"title":"Reports","description":"The downloadable and scheduled reports a merchant pulls from the dashboard for reconciliation, compliance and treasury: payment, subscription, settlement breakup, balance statement and KYC reports, plus scheduling one for recurring email delivery and customizing the fields and column order of a report. Dashboard only - there is no reports API.","includeFiles":["**/reports/**"]},{"title":"Identity and Access Management","description":"Administering who can use a merchant account: one set of credentials across multiple MIDs, switching between them without logging out, the Admin / Member / Sales Partner roles and what each may see and do, and inviting a new member. Dashboard only - there is no users, roles or invites API.","includeFiles":["**/access-management/**"]},{"title":"Settlement holidays","description":"The settlement holiday calendar for 2026 - the Indian and US bank and FX holidays on which payin, payout and settlement to the merchant's bank account may be delayed.","includeFiles":["**/settlement-holidays/**"]},{"title":"API reference","description":"Endpoint reference generated from the Glomo OpenAPI description.","includeFiles":["**/api-reference/**"]},{"title":"Developer resources","description":"What every integration touches and no single product owns: auth, errors, pagination, rate limits, webhooks, versioning, API validations, security, supported countries, quotes, connecting an AI agent to the Glomo MCP server, and the client SDKs - React Native, Flutter, Android and the Unified Web SDK, with per-version references and changelogs. Reports and Identity and Access Management used to be listed here and are now their own sections.","includeFiles":["**/platform/**"]}]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"collect-lrs-remittances-from-india","__idx":0},"children":["Collect LRS remittances from India"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide uses the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/unified-sdk"},"children":["Glomo Unified SDK"]}]}," — the Order Checkout journey auto-detects the LRS flow. Make sure the order is created as an LRS order: ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["an order lacking a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["checkout_type"]}," defaults to the standard checkout."]}," See the Unified SDK reference for the full set of journeys and options. To open checkout inside a native mobile app, see ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/platform/sdk/experimental"},"children":["Web Checkout in a Mobile App (WebView)"]}]},". If you integrated earlier with the older ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lrs-checkout-sdk"]},", it continues to work — switch the import to the Unified SDK when convenient."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The sequence diagram below represents the interactions between the investor, broker, Glomo API and Glomo Web SDK."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/workflow-for-merchants.45a6071f510c11fc042d916b19829cfed467da8d9b46698824748b87e33af781.ac746e58.png","alt":"Workflow for merchants "},"children":[]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"integration-steps","__idx":1},"children":["Integration steps"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Below are the steps to integrate the Glomo APIs and Web SDK to enable remittance of funds from investors"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"fetch-supported-banks-optional","__idx":2},"children":["Fetch supported banks (optional)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getLrsBanks"]}]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v1/lrs/banks"]}," · ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/openapi/lrs/getlrsbanks"},"children":["API reference"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Fetch the list of banks supported on the remittance flow using this API. Only the banks enabled for your account are listed, so the list can be empty."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"api-endpoint","__idx":3},"children":["API Endpoint"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"GET https://api.glomopay.com/api/v1/lrs/banks\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"request","__idx":4},"children":["Request"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"curl -i -X GET \\\n  https://api.glomopay.com/api/v1/lrs/banks \\\n  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \\\n  -H 'Content-Type: application/json'\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"response","__idx":5},"children":["Response"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"[\n    { \"bank_code\": \"hdfc\", \"bank_name\": \"HDFC bank\" },\n    { \"bank_code\": \"axis\", \"bank_name\": \"Axis bank\" }\n]\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"create-a-customer","__idx":6},"children":["Create a customer"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createCustomer"]}]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/customer"]}," · ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/openapi/customer/createcustomer"},"children":["API reference"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create a customer entity in Glomo’s system by adding the customer details such as contact details, name and address."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Call this API when the investor adds funds for the first time. Store the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer_id"]}," received in the response and reuse it for the investor’s return journey."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["By default, customer uniqueness is enforced on ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["email"]},". On request, this can instead be enforced on ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["PAN"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kyc.pan_number"]},") in place of email, so investors are de-duplicated by PAN even if they use different emails. This is off by default — to enable PAN-based uniqueness for your account, reach out to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"mailto:support@glomopay.com"},"children":["support@glomopay.com"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"customer-field-restrictions","__idx":7},"children":["Customer field restrictions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When you create a customer (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /customer"]},"), Glomo checks the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["address"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["city"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["state"]}," fields:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Length"},"children":["Length"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Allowed characters"},"children":["Allowed characters"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["city"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2–100 characters"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Letters ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["A-Z"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["a-z"]},", digits ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0-9"]},", space, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["-"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["'"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[","]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["."]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["&"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[":"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["("]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[")"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["state"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2–100 characters"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Letters ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["A-Z"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["a-z"]},", digits ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0-9"]},", space, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["-"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["'"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[","]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["."]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["&"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[":"]}," (brackets are not allowed)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["address"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2–255 characters"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Letters ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["A-Z"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["a-z"]},", digits ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0-9"]},", space, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["-"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[","]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["."]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["#"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["("]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[")"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["'"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["["]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["]"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["&"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[":"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\\"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["city"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["state"]}," must not start or end with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["-"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["'"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[","]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Any other character is rejected. Common examples: accented letters such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["é"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ū"]},", letters from other scripts, the curly apostrophe ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["’"]},", the long dash ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["–"]},", the non-breaking space (often added by copy and paste), and the symbols ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["@"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[";"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\""]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["+"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["!"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A customer is a duplicate when its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["country"]}," match a customer that already exists in your account. Letter case in the email does not matter. Don't create the customer again; find the existing one with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /customer?email_address=<email>"]}," (exact match, case-insensitive) and reuse its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A request that breaks any of these rules is rejected with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]},", and the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]}," field gives the reason. Nothing is created, so you can send the request again once the data is corrected."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Don't retry a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," unchanged; it will be rejected again. Retry only after a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5xx"]}," error or a timeout. Where possible, check the data against these rules before you send it."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"api-endpoint-1","__idx":8},"children":["API Endpoint"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"POST https://api.glomopay.com/api/v1/customer\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"request-1","__idx":9},"children":["Request"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  https://api.glomopay.com/api/v1/customer \\\n  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"name\": \"John Doe\",\n    \"customer_type\": \"individual\",\n    \"email\": \"investor@example.com\",\n    \"phone\": \"+91-9876543210\",\n    \"dob\": \"1990-01-01\",\n    \"address\": \"123 Main St\",\n    \"city\": \"Anytown\",\n    \"state\": \"Anystate\",\n    \"country\": \"IND\",\n    \"pincode\": \"560048\",\n    \"kyc\": {\n        \"pan_number\": \"BFQPG7654R\"\n    }\n  }'\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"response-1","__idx":10},"children":["Response"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"{\n    \"id\": \"cust_68468bfcxaGo2\",\n    \"name\": \"John Doe\",\n    \"customer_type\": \"individual\",\n    \"email\": \"investor@example.com\",\n    \"phone\": \"+91-9876543210\",\n    \"address\": \"123 Main St\",\n    \"city\": \"Anytown\",\n    \"state\": \"Anystate\",\n    \"country\": \"IND\",\n    \"pincode\": \"560048\",\n    \"status\": \"active\",\n    \"created_at\": \"2025-06-09T07:23:40.598Z\",\n    \"updated_at\": \"2025-06-09T07:23:40.598Z\",\n    \"kyc\": {\n        \"pan_number\": \"BFQPG7654R\"\n    }\n}\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"create-a-bank-account","__idx":11},"children":["Create a bank account"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createLrsCustomerBankAccount"]}]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/customer/{id}/bank_account"]}," · ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/openapi/lrs/createlrscustomerbankaccount"},"children":["API reference"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create a bank account entity in Glomo’s system by adding the bank account information of the remitter."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Call this API when the investor adds funds for the first time. Store the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["acclrs_id"]}," received in the response and reuse it for the investor’s return journey."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," returned in the API response should be passed as a value of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_account_id"]}," in the Create an Order API request."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_customer_id"]}," is the investor's customer ID at their bank. It is optional for every bank. It is checked only for HDFC and Kotak, where it must contain only digits and have a length that bank accepts, or the call returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]},". For other banks the value is stored as sent. For HDFC and Kotak, if not provided, the checkout will prompt the customer to enter this value during the payment flow."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"account-number-restrictions","__idx":12},"children":["Account number restrictions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When you add a customer's bank account (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /customer/{id}/bank_account"]},"), Glomo checks that the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["account_number"]}," is digits only and that its length is within the range the bank accepts:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Bank"},"children":["Bank"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Accepted length"},"children":["Accepted length"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["HDFC"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["14–15 digits"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["IDFC"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["9–11 digits"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ICICI"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["12–15 digits"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Axis"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["10–15 digits"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Kotak"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["10–14 digits"]}]}]}]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Send the account number exactly as the bank issued it: digits only, with no spaces, hyphens or other characters. Keep any leading zeros."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A number outside the range is rejected with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]},". The error message names the bank and the length it expects. Nothing is created or changed, so you can retry once the number is corrected."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Don't retry the same number unchanged; it will be rejected again. Check the number with the customer first."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["These ranges are confirmed with each bank. Some older accounts may not follow a bank's current format. If you have a valid account number that falls outside its range, contact Glomo support and we will check it with the bank."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"api-endpoint-2","__idx":13},"children":["API Endpoint"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"POST https://api.glomopay.com/api/v1/customer/{customer_id}/bank_account\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"request-2","__idx":14},"children":["Request"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  https://api.glomopay.com/api/v1/customer/cust_68468bfcxaGo2/bank_account \\\n  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"bank_code\": \"hdfc\",\n    \"account_number\": \"12345678901234\",\n    \"bank_customer_id\": \"12345678\"\n  }'\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"response-2","__idx":15},"children":["Response"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"{\n    \"id\": \"acclrs_68468c03g9xt7\",\n    \"bank_code\": \"hdfc\",\n    \"account_number\": \"12345678901234\",\n    \"bank_customer_id\": \"12345678\"\n}\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"update-bank-customer-id","__idx":16},"children":["Update Bank Customer ID"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["updateLrsCustomerBankAccount"]}]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PATCH /v1/customer/{id}/bank_account/{bank_account_id}"]}," · ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/openapi/lrs/updatelrscustomerbankaccount"},"children":["API reference"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use Case:"]}," In case the customer has provided an incorrect Bank Customer ID in the Create a Bank Account API, call this API endpoint to update the Bank Customer ID in Glomo."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"api-endpoint-3","__idx":17},"children":["API Endpoint"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"PATCH https://api.glomopay.com/api/v1/customer/{customer_id}/bank_account/{bank_account_id}\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"request-3","__idx":18},"children":["Request"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"curl --location --request PATCH 'https://api.glomopay.com/api/v1/customer/cust_68468bfcxaGo2/bank_account/acclrs_68468c03g9xt7' \\\n  --header 'Content-Type: application/json' \\\n  --header 'Authorization: Bearer <YOUR_JWT_HERE>' \\\n  --data '{\n    \"bank_customer_id\": \"87654321\"\n  }'\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"response-3","__idx":19},"children":["Response"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"{\n    \"id\": \"acclrs_68468c03g9xt7\",\n    \"bank_code\": \"hdfc\",\n    \"account_number\": \"12345678901234\",\n    \"bank_customer_id\": \"87654321\"\n}\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"create-a-beneficiary-optional","__idx":20},"children":["Create a Beneficiary (optional)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createBeneficiaryV2"]}]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/beneficiaries"]}," · ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/openapi/beneficiary_v2/createbeneficiaryv2"},"children":["API reference"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create a Beneficiary entity in Glomo by providing the receiver’s bank account details. This entity is required when beneficiaries are dynamic (i.e., a different beneficiary per end-user of the broker/fund, or per transaction) and should be created via API."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If there is one fixed beneficiary shared across all users, you do not need to create a Beneficiary per user in Glomo. In this scenario, the beneficiary can be configured once in Glomo’s backend system and reused for all transactions."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," For LRS beneficiaries, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["intermediate_bank.swift_code"]}," field is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["required"]},". This is the SWIFT/BIC code of the correspondent/intermediary bank used to route the remittance."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"api-endpoint-4","__idx":21},"children":["API Endpoint"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"POST https://api.glomopay.com/api/v2/beneficiaries\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"request-4","__idx":22},"children":["Request"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  https://api.glomopay.com/api/v2/beneficiaries \\\n  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"category\": \"lrs\",\n    \"beneficiary\": {\n      \"name\": \"ACME Corporation\",\n      \"type\": \"business\",\n      \"email\": \"finance@acme.com\",\n      \"phone\": \"+1-555-123-4567\",\n      \"nickname\": \"ACME Primary Account\",\n      \"address\": {\n        \"address_line1\": \"123 Business Park\",\n        \"address_line2\": \"Suite 100\",\n        \"city\": \"New York\",\n        \"state\": \"NY\",\n        \"country_code\": \"USA\",\n        \"postal_code\": \"10001\"\n      }\n    },\n    \"bank_account\": {\n      \"account_number\": \"1234567890\",\n      \"name\": \"Citibank NA\",\n      \"swift_code\": \"CITIUS33\",\n      \"local_routing_number\": \"021000089\",\n      \"currency\": \"USD\",\n      \"address\": {\n        \"address_line1\": \"388 Greenwich Street\",\n        \"city\": \"New York\",\n        \"state\": \"NY\",\n        \"country_code\": \"USA\",\n        \"postal_code\": \"10013\"\n      },\n      \"intermediate_bank\": {\n        \"name\": \"JPMorgan Chase Bank\",\n        \"country\": \"USA\",\n        \"swift_code\": \"CHASUS33\",\n        \"account_number\": \"123456789\"\n      }\n    }\n  }'\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"response-4","__idx":23},"children":["Response"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"{\n  \"id\": \"bene_5JU9yv0lGSUP\",\n  \"name\": \"ACME Corporation\",\n  \"type\": \"business\",\n  \"category\": \"lrs\",\n  \"email\": \"finance@acme.com\",\n  \"phone\": \"+1-555-123-4567\",\n  \"nickname\": \"ACME Primary Account\",\n  \"created_at\": \"2025-01-15T10:00:00Z\",\n  \"updated_at\": \"2025-01-15T10:00:00Z\",\n  \"address\": {\n    \"address_line1\": \"123 Business Park\",\n    \"address_line2\": \"Suite 100\",\n    \"city\": \"New York\",\n    \"state\": \"NY\",\n    \"country_code\": \"USA\",\n    \"postal_code\": \"10001\"\n  },\n  \"bank_account\": {\n    \"account_number\": \"1234567890\",\n    \"name\": \"Citibank NA\",\n    \"swift_code\": \"CITIUS33\",\n    \"local_routing_number\": \"021000089\",\n    \"currency\": \"USD\",\n    \"address\": {\n      \"address_line1\": \"388 Greenwich Street\",\n      \"city\": \"New York\",\n      \"state\": \"NY\",\n      \"country_code\": \"USA\",\n      \"postal_code\": \"10013\"\n    },\n    \"intermediate_bank\": {\n      \"name\": \"JPMorgan Chase Bank\",\n      \"country\": \"USA\",\n      \"swift_code\": \"CHASUS33\",\n      \"account_number\": \"123456789\"\n    }\n  }\n}\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"create-a-quote","__idx":24},"children":["Create a quote"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createLrsQuote"]}]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/lrs/quotes"]}," · ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/openapi/lrs/createlrsquote"},"children":["API reference"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create a quote from the server by passing the amount to be remitted and the bank of the customer. Using this API you can display FX rate, tax and net USD to your user before proceeding. Please note that all currency fields are represented in minor units (e.g., cents, paisa, or equivalent subunits)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the response:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fx_rate"]}," is always INR per 1 USD, whichever direction you quote in. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"84.85\""]}," means ₹84.85 to $1."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["total_tax"]}," is the GST, an integer in paisa. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["7906"]}," is ₹79.06."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["For an INR-to-USD quote, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["to.amount"]}," is the USD remitted after the GST is deducted from the INR amount. Pass it as the order's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expires_at"]}," is when the quote expires. An order created from the quote expires at the same time."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quote_id"]}," generated from this API is valid for 30 minutes from the time of creation; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expires_at"]}," gives the exact time. The displayed exchange rate is indicative. Actual exchange rate and final INR debit (incl. GST & TCS) are set by the banking partner."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"api-endpoint-5","__idx":25},"children":["API Endpoint"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"POST https://api.glomopay.com/api/v1/lrs/quotes\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"request-5","__idx":26},"children":["Request"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  https://api.glomopay.com/api/v1/lrs/quotes \\\n  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"bank_code\": \"hdfc\",\n    \"source_amount\": 4400000,\n    \"source_currency\": \"INR\",\n    \"target_currency\": \"USD\"\n  }'\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"response-5","__idx":27},"children":["Response"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"{\n    \"id\": \"quote_6ab60de4Kx7Pq\",\n    \"from\": {\n        \"amount\": 4400000,\n        \"currency\": \"INR\"\n    },\n    \"to\": {\n        \"amount\": 51763,\n        \"currency\": \"USD\"\n    },\n    \"fx_rate\": \"84.85\",\n    \"bank_code\": \"hdfc\",\n    \"total_tax\": 7906,\n    \"expires_at\": \"2026-09-25T06:30:04.113Z\",\n    \"created_at\": \"2026-09-25T06:00:04.113Z\"\n}\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"create-an-order-on-the-server","__idx":28},"children":["Create an order on the server"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createOrder"]}]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/orders"]}," · ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/openapi/orders/createorder"},"children":["API reference"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Initiate the payment process by creating an order from your server using your secret API keys and the previously created quote ID."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," returned in the API response should be passed to the web sdk. This ensures the payment is securely linked to the correct order and prevents tampering."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The Order API accepts amounts in USD, with the value expressed in cents. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["currency"]}," must be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USD"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]}," must equal the USD side of the quote: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["to.amount"]}," for an INR-to-USD quote, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["from.amount"]}," for a USD-to-INR quote."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["remittance_information"]}," is a reference string that helps identify the purpose of the remittance. It cannot be empty, must contain only alphanumeric characters and hyphens (a–z, A–Z, 0–9, -), with no spaces or special characters, and must not exceed 20 characters in length."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["request_id"]}," is an optional idempotency key. Creating an order with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["request_id"]}," that was already used returns a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," error (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Order already exists for this request_id"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["purpose_code"]}," is optional. An LRS order accepts only ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["S0001"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["S0002"]},", and uses ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["S0001"]}," if you leave it out. Any other value returns a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," error."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An LRS order expires when its quote expires (see ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expires_at"]}," on the quote): the order's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expires_at"]}," is set to the quote's. Creating an order from a quote that has already expired returns a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," error. The order's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," may not show ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expired"]}," straight away. It usually updates within about 5 minutes, and not until any open payment attempt on the order has resolved; an attempt already under way can still complete the order. Use the quote's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expires_at"]},", not the order's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]},", to decide whether the customer can start a new payment."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," If the quote expires while the investor has checkout open, payment creation fails with an error saying the quote or order has expired. Create a new quote and a new order, and open checkout again with the new order ID."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"api-endpoint-6","__idx":29},"children":["API Endpoint"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"POST https://api.glomopay.com/api/v1/orders\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"request-6","__idx":30},"children":["Request"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  https://api.glomopay.com/api/v1/orders \\\n  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"customer_id\": \"cust_68468bfcxaGo2\",\n    \"currency\": \"USD\",\n    \"amount\": 51763,\n    \"request_id\": \"unique_order_request_id_123\",\n    \"notes\": {\n      \"key1\": \"some note\"\n    },\n    \"lrs\": {\n        \"lrs_quote_id\": \"quote_6ab60de4Kx7Pq\",\n        \"remittance_information\": \"REF12345\",\n        \"bank_account_id\": \"acclrs_68468c03g9xt7\",\n        \"beneficiary_id\": \"bene_5JU9yv0lGSUP\"\n    }\n  }'\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," LRS orders don't store ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invoice_number"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invoice_description"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invoice_amount"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reference_number"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["document_id"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["product"]},"; they come back as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," or are left out. A value you send is still validated (a malformed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invoice_number"]},", for example, returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]},"), so leave these fields out."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"response-6","__idx":31},"children":["Response"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"{\n    \"id\": \"order_6ab60f0cLm4Wz\",\n    \"customer_id\": \"cust_68468bfcxaGo2\",\n    \"document_id\": null,\n    \"status\": \"active\",\n    \"currency\": \"USD\",\n    \"amount\": 51763,\n    \"remaining_amount\": 51763,\n    \"already_paid_amount\": 0,\n    \"purpose_code\": \"S0001\",\n    \"invoice_amount\": null,\n    \"invoice_description\": null,\n    \"invoice_number\": null,\n    \"notes\": {\n        \"key1\": \"some note\"\n    },\n    \"expires_at\": \"2026-09-25T06:30:04Z\",\n    \"created_at\": \"2026-09-25T06:05:00Z\",\n    \"updated_at\": \"2026-09-25T06:05:00Z\",\n    \"reference_number\": null,\n    \"lrs\": {\n        \"lrs_quote_id\": \"quote_6ab60de4Kx7Pq\",\n        \"remittance_information\": \"REF12345\",\n        \"bank_account_id\": \"acclrs_68468c03g9xt7\",\n        \"beneficiary_id\": \"bene_5JU9yv0lGSUP\"\n    }\n}\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"add-the-payment-button-on-your-website-or-app","__idx":32},"children":["Add the payment button on your website or app"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Integrate an “Add Funds” button into your client-side interface."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Add the provided code snippet to your website or app to launch Glomo’s sdk."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["When the user clicks the button, the checkout form will open, using the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["order_id"]}," created using above API."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Handle payment initiation success and failure events using the provided handler functions."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["On payment completion, you’ll receive either a payment object (on successful authorisation by the user) or an error object (on failure)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Send this information back to your server for order fulfillment or to trigger a retry if the payment failed."]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"html","header":{"controls":{"copy":{}}},"source":"<!DOCTYPE html>\n<html>\n<head>\n    <title>Glomo checkout integration</title>\n</head>\n<body>\n    <button id=\"pay-button\">Pay with Glomo</button>\n\n    <script type=\"module\">\n        import { GlomoCheckoutApi } from 'https://unified-sdk.glomopay.com/index.js';\n\n        document.getElementById('pay-button').addEventListener('click', async () => {\n            try {\n                // Initialize the checkout\n                const checkout = new GlomoCheckoutApi({\n                    publicKey: 'your-public-key-here',\n                    orderId: 'unique-order-id-123', // an LRS order — the Unified SDK auto-detects the LRS flow\n                });\n\n                // Handle payment success\n                checkout.on('payment.success', (data) => {\n                    console.log('Payment successful:', data);\n                    // Handle successful payment\n                    window.location.href = '/payment-success';\n                });\n\n                // Handle payment failure\n                checkout.on('payment.failure', (data) => {\n                    console.log('Payment failed:', data);\n                    // Handle failed payment\n                    alert('Payment failed. Please try again.');\n                });\n\n                // Handle checkout close\n                checkout.on('checkout.closed', () => {\n                    console.log('Checkout closed by user');\n                    // Handle checkout modal close\n                });\n\n                // Open the checkout modal\n                await checkout.open();\n\n            } catch (error) {\n                console.error('Checkout error:', error);\n                alert('Unable to open checkout. Please try again.');\n            }\n        });\n    </script>\n</body>\n</html>\n","lang":"html"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"verify-the-sdk-response-and-signature-on-the-server","__idx":33},"children":["Verify the SDK response and signature on the server"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The process to verify the signature can be found ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/payin/checkout"},"children":["here"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"verify-payment-status","__idx":34},"children":["Verify payment status"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Payment status can be tracked via the following ways"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Dashboard Monitoring: View real-time updates for all payments in the Glomo merchant dashboard."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Payment API Polling: Programmatically check payment status using Glomo’s Payment APIs."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Webhook Notification: Get instant notifications on payment status changes directly to your server."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"test-it-in-sandbox","__idx":35},"children":["Test it in sandbox"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Sandbox runs the same checkout your customers see, against a simulated bank. The only change to your integration is the keys:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Create the customer, bank account, quote and order from your server with your ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["test"]}," secret key."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open checkout with your ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["test"]}," public key (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["test_…"]},"). Glomo routes to sandbox from the key prefix, so you load the same SDK from the same hosts as in production. You can test a production build of your app this way."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An order created with live keys cannot be opened with a test key, and the other way round."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"complete-the-otp-step","__idx":36},"children":["Complete the OTP step"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The simulated bank does not send an OTP. Enter ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["123456"]},"; any other value is rejected as a wrong OTP."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"trigger-the-document-upload-step","__idx":37},"children":["Trigger the document upload step"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In production, the bank asks for an ITR or a bank statement when the customer's account is less than a year old. In sandbox, checkout asks for it only for these bank accounts:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Bank"},"children":["Bank"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"bank_code"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_code"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"account_number"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["account_number"]}]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["HDFC"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hdfc"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["50100117322072"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Axis"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["axis"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["925010000230876"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#create-a-bank-account"},"children":["Create the bank account"]}," with one of them, use its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_account_id"]}," on the order, and use a quote for the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_code"]},". The bank must be one that ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#fetch-supported-banks-optional"},"children":["Fetch supported banks"]}," returns for your sandbox account. After the OTP, checkout shows the document step. With any other account number, it skips the step."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Upload an ITR to test the step: any readable PDF within the size limit checkout shows is accepted."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once a payment with an uploaded ITR succeeds, later payments by the same customer reuse that ITR for 90 days and skip the step. To see the step again, create a new customer and add the same test account to them."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"mark-the-payment-successful","__idx":38},"children":["Mark the payment successful"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There is no bank confirmation in sandbox, so a payment completed in checkout stays ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["In Progress"]},". To simulate the bank's confirmation:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Log in to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Dashboard"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Payment Details"]}," page for the payment."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Update Status"]}," on the right side of the screen."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Success"]}," and click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Confirm"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In production, Glomo updates the status automatically once the bank confirms the payment."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For answers to common integration questions, see the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/payin/resident-india-remittance-under-lrs/set-up/faq"},"children":["FAQ"]},"."]}]},"headings":[{"value":"Collect LRS remittances from India","id":"collect-lrs-remittances-from-india","depth":1},{"value":"Integration steps","id":"integration-steps","depth":1},{"value":"Fetch supported banks (optional)","id":"fetch-supported-banks-optional","depth":2},{"value":"API Endpoint","id":"api-endpoint","depth":3},{"value":"Request","id":"request","depth":3},{"value":"Response","id":"response","depth":3},{"value":"Create a customer","id":"create-a-customer","depth":2},{"value":"Customer field restrictions","id":"customer-field-restrictions","depth":3},{"value":"API Endpoint","id":"api-endpoint-1","depth":3},{"value":"Request","id":"request-1","depth":3},{"value":"Response","id":"response-1","depth":3},{"value":"Create a bank account","id":"create-a-bank-account","depth":2},{"value":"Account number restrictions","id":"account-number-restrictions","depth":3},{"value":"API Endpoint","id":"api-endpoint-2","depth":3},{"value":"Request","id":"request-2","depth":3},{"value":"Response","id":"response-2","depth":3},{"value":"Update Bank Customer ID","id":"update-bank-customer-id","depth":2},{"value":"API Endpoint","id":"api-endpoint-3","depth":3},{"value":"Request","id":"request-3","depth":3},{"value":"Response","id":"response-3","depth":3},{"value":"Create a Beneficiary (optional)","id":"create-a-beneficiary-optional","depth":2},{"value":"API Endpoint","id":"api-endpoint-4","depth":3},{"value":"Request","id":"request-4","depth":3},{"value":"Response","id":"response-4","depth":3},{"value":"Create a quote","id":"create-a-quote","depth":2},{"value":"API Endpoint","id":"api-endpoint-5","depth":3},{"value":"Request","id":"request-5","depth":3},{"value":"Response","id":"response-5","depth":3},{"value":"Create an order on the server","id":"create-an-order-on-the-server","depth":2},{"value":"API Endpoint","id":"api-endpoint-6","depth":3},{"value":"Request","id":"request-6","depth":3},{"value":"Response","id":"response-6","depth":3},{"value":"Add the payment button on your website or app","id":"add-the-payment-button-on-your-website-or-app","depth":2},{"value":"Verify the SDK response and signature on the server","id":"verify-the-sdk-response-and-signature-on-the-server","depth":2},{"value":"Verify payment status","id":"verify-payment-status","depth":2},{"value":"Test it in sandbox","id":"test-it-in-sandbox","depth":2},{"value":"Complete the OTP step","id":"complete-the-otp-step","depth":3},{"value":"Trigger the document upload step","id":"trigger-the-document-upload-step","depth":3},{"value":"Mark the payment successful","id":"mark-the-payment-successful","depth":3}],"frontmatter":{"title":"Collect LRS remittances from India","description":"End-to-end flow for remitting funds abroad on behalf of a resident Indian investor under the Liberalised Remittance Scheme, using the Glomo APIs and the Unified SDK.","seo":{"title":"Collect LRS remittances from India"}},"lastModified":"2026-11-06T11:06:03.693Z","pagePropGetterError":{"message":"","name":""}},"slug":"/payin/resident-india-remittance-under-lrs/set-up","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}