diff --git a/components/grid-visualizer/src/data/account-types.ts b/components/grid-visualizer/src/data/account-types.ts index a23a639f..ee1f0ed7 100644 --- a/components/grid-visualizer/src/data/account-types.ts +++ b/components/grid-visualizer/src/data/account-types.ts @@ -54,7 +54,11 @@ export const accountTypeSpecs: Record = { INR_ACCOUNT: { accountType: 'INR_ACCOUNT', fields: [ - { name: 'vpa', example: 'customer@okbank' }, + { name: 'vpa', example: 'customer@okbank', description: 'For UPI' }, + { name: 'accountNumber', example: '000111222333', description: 'For NEFT/RTGS' }, + { name: 'ifsc', example: 'HDFC0001234', description: 'For NEFT/RTGS' }, + { name: 'rail', example: 'NEFT', description: 'NEFT or RTGS' }, + { name: 'bankName', example: 'HDFC Bank', description: 'Optional' }, ], beneficiaryRequired: true, }, @@ -328,7 +332,8 @@ export const accountTypeSpecs: Record = { accountType: 'GTQ_ACCOUNT', fields: [ { name: 'accountNumber', example: '1234567890' }, - { name: 'phoneNumber', example: '+50212345678' }, + { name: 'bankAccountType', example: 'CHECKING', description: 'CHECKING or SAVINGS' }, + { name: 'bankName', example: 'Example Bank' }, ], beneficiaryRequired: true, }, @@ -345,6 +350,7 @@ export const accountTypeSpecs: Record = { { name: 'accountNumber', example: '1234567890' }, { name: 'branchCode', example: '12345', description: '5-digit branch code' }, { name: 'bankAccountType', example: 'CHECKING', description: 'CHECKING or SAVINGS' }, + { name: 'bankName', example: 'Example Bank' }, ], beneficiaryRequired: true, }, diff --git a/components/grid-visualizer/src/data/currencies.ts b/components/grid-visualizer/src/data/currencies.ts index 5b7ed99d..5aff7d5a 100644 --- a/components/grid-visualizer/src/data/currencies.ts +++ b/components/grid-visualizer/src/data/currencies.ts @@ -70,9 +70,9 @@ export const currencies: FiatCurrency[] = [ name: 'Indian Rupee', countryCode: 'in', accountType: 'INR_ACCOUNT', - accountLabel: 'UPI', + accountLabel: 'UPI / Bank Account', instantRails: ['UPI'], - allRails: ['UPI'], + allRails: ['UPI', 'NEFT', 'RTGS'], examplePerson: { fullName: 'Priya Sharma', nationality: 'IN' }, }, { diff --git a/mintlify/snippets/country-support.mdx b/mintlify/snippets/country-support.mdx index 13f979fc..84900cfc 100644 --- a/mintlify/snippets/country-support.mdx +++ b/mintlify/snippets/country-support.mdx @@ -40,7 +40,7 @@ import { FeatureCard, FeatureCardGrid, FeatureCardList, FeatureCardContainer } f | 🇭🇹 Haiti | HT | `Bank Transfer` | | 🇭🇺 Hungary | HU | `SEPA` `SEPA Instant` | | 🇮🇸 Iceland | IS | `SEPA` `SEPA Instant` | -| 🇮🇳 India | IN | `UPI` | +| 🇮🇳 India | IN | `UPI` `NEFT` `RTGS` | | 🇮🇩 Indonesia | ID | `Bank Transfer` | | 🇮🇪 Ireland | IE | `SEPA` `SEPA Instant` | | 🇮🇹 Italy | IT | `SEPA` `SEPA Instant` | diff --git a/mintlify/snippets/external-accounts.mdx b/mintlify/snippets/external-accounts.mdx index 16fb671e..2db11bc8 100644 --- a/mintlify/snippets/external-accounts.mdx +++ b/mintlify/snippets/external-accounts.mdx @@ -401,7 +401,11 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco -**UPI** +**UPI, NEFT, or RTGS** + +India supports three payment rails: UPI (instant), NEFT (near-real-time), and RTGS (real-time for large transfers). + +**UPI:** ```bash cURL curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-accounts' \ @@ -413,6 +417,40 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco "accountInfo": { "accountType": "INR_ACCOUNT", "vpa": "user@okbank", + "paymentRails": ["UPI"], + "beneficiary": { + "beneficiaryType": "INDIVIDUAL", + "fullName": "Priya Sharma", + "birthDate": "1991-05-14", + "nationality": "IN", + "address": { + "line1": "123 MG Road", + "city": "Mumbai", + "state": "Maharashtra", + "postalCode": "400001", + "country": "IN" + } + } + } + }' +``` + +**NEFT/RTGS (Bank Transfer):** + +```bash cURL +curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-accounts' \ + -H 'Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET' \ + -H 'Content-Type: application/json' \ + -d '{ + "currency": "INR", + "platformAccountId": "in_neft_001", + "accountInfo": { + "accountType": "INR_ACCOUNT", + "accountNumber": "000111222333", + "ifsc": "HDFC0001234", + "rail": "NEFT", + "bankName": "HDFC Bank", + "paymentRails": ["NEFT"], "beneficiary": { "beneficiaryType": "INDIVIDUAL", "fullName": "Priya Sharma", @@ -430,6 +468,9 @@ curl -X POST 'https://api.lightspark.com/grid/2025-10-13/customers/external-acco }' ``` + + UPI requires `vpa` (Virtual Payment Address). NEFT/RTGS requires `accountNumber` (9-18 digits), `ifsc` (11-character bank branch code), and `rail` (NEFT or RTGS). + diff --git a/samples/kotlin/src/main/kotlin/com/grid/sample/routes/ExternalAccounts.kt b/samples/kotlin/src/main/kotlin/com/grid/sample/routes/ExternalAccounts.kt index ecdcba3f..471bf675 100644 --- a/samples/kotlin/src/main/kotlin/com/grid/sample/routes/ExternalAccounts.kt +++ b/samples/kotlin/src/main/kotlin/com/grid/sample/routes/ExternalAccounts.kt @@ -116,8 +116,14 @@ private fun buildAccountInfo(accountType: String, accountInfo: JsonNode): Extern "INR_ACCOUNT" -> { val info = InrExternalAccountCreateInfo.builder() .accountType(InrExternalAccountCreateInfo.AccountType.INR_ACCOUNT) - .vpa(accountInfo.requireText("vpa")) .beneficiary(buildInrBeneficiary(beneficiaryNode)) + .apply { + accountInfo.optText("vpa")?.let { vpa(it) } + accountInfo.optText("accountNumber")?.let { accountNumber(it) } + accountInfo.optText("ifsc")?.let { ifsc(it) } + accountInfo.optText("rail")?.let { rail(it) } + accountInfo.optText("bankName")?.let { bankName(it) } + } .build() ExternalAccountCreate.AccountInfo.ofInrAccount(info) }