Skip to content

External Accounts Updates#202

Merged
AaryamanBhute merged 8 commits intomainfrom
changes-present
Feb 23, 2026
Merged

External Accounts Updates#202
AaryamanBhute merged 8 commits intomainfrom
changes-present

Conversation

@AaryamanBhute
Copy link
Contributor

No description provided.

@github-actions
Copy link
Contributor

github-actions bot commented Feb 17, 2026

✱ Stainless preview builds

This PR will update the grid SDKs with the following commit messages.

kotlin

feat: External Accounts Updates

openapi

feat(api): add 10 currency accounts, remove 7 legacy types, add originalQuoteId to quotes

python

feat(api): add BRL/DKK/GBP/HKD/IDR/INR/MXN/MYR/PHP/SGD/THB/USD/VND account types, quote field

typescript

feat(api): add BRL/DKK/GBP/HKD/IDR/INR/MXN/MYR/PHP/SGD/THB/USD/VND account types
grid-openapi studio · code

Your SDK build had at least one "note" diagnostic.
generate ✅

grid-python studio · code

Your SDK build had at least one "note" diagnostic.
generate ✅build ✅lint ✅test ✅

pip install https://pkg.stainless.com/s/grid-python/2eae37cc93701a20c388913334bb3b8d9b88cfb9/grid-0.0.1-py3-none-any.whl
grid-kotlin studio · code

Your SDK build had at least one "note" diagnostic.
generate ✅build ✅lint ✅test ✅

grid-typescript studio · code

Your SDK build had at least one "note" diagnostic.
generate ✅build ✅lint ✅test ✅

npm install https://pkg.stainless.com/s/grid-typescript/ab875a8f7c2996eeb963511f37d2190782353498/dist.tar.gz

This comment is auto-generated by GitHub Actions and is automatically kept up to date as you push.
If you push custom code to the preview branch, re-run this workflow to update the comment.
Last updated: 2026-02-23 22:07:33 UTC

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 17, 2026

Greptile Summary

This PR standardizes external account schemas by migrating from account-type-specific naming (UsAccountInfo, PixAccountInfo, ClabeAccountInfo) to currency-specific schemas (UsdAccountInfo, BrlAccountInfo, MxnAccountInfo, etc.). Adds EUR account support and introduces currency-specific beneficiary schemas with discriminators for individual vs. business types.

Key changes:

  • Added EUR account schema with IBAN/SWIFT BIC support for SEPA payments
  • Migrated US accounts from UsAccountInfo to UsdAccountInfo (removes accountCategory field and validation patterns)
  • Added 9 new currency account schemas: BRL, DKK, HKD, IDR, INR, MXN, MYR, THB, VND
  • Introduced currency-specific beneficiary schemas (individual and business types)
  • Updated PaymentInstructions and ExternalAccountInfoOneOf with new currency-based discriminator mappings
  • Updated Stainless configuration to reference new schema names

Issues noted:

  • UsdAccountInfo removes required accountCategory field (CHECKING/SAVINGS) from original UsAccountInfo - potential breaking change
  • IdrAccountInfo uses UK-specific sortCode terminology instead of Indonesian bankCode
  • Several schemas have vague descriptions (e.g., "account number of the bank" instead of "beneficiary's bank account number")

Confidence Score: 4/5

  • This PR is safe to merge with minor issues around field descriptions and one potential breaking change
  • The refactoring is well-structured and follows a consistent pattern across all currency schemas. The main concerns are (1) removal of accountCategory from USD accounts which may be a breaking change if backends still require it, and (2) use of incorrect banking terminology in IdrAccountInfo. These are important but not critical issues.
  • Pay close attention to UsdAccountInfo.yaml for the removed accountCategory field and IdrAccountInfo.yaml for incorrect terminology

Important Files Changed

Filename Overview
openapi/components/schemas/common/EurAccountInfo.yaml New EUR account schema added with IBAN/SWIFT fields and SEPA payment rails support
openapi/components/schemas/common/UsdAccountInfo.yaml Replaces UsAccountInfo, removes accountCategory field and validation patterns for routing/account numbers
openapi/components/schemas/common/BrlAccountInfo.yaml New BRL account schema with PIX key support and tax ID field
openapi/components/schemas/common/IdrAccountInfo.yaml New IDR account schema, but uses UK-specific 'sortCode' terminology instead of Indonesian 'bankCode'
openapi/components/schemas/common/MxnAccountInfo.yaml New MXN account schema with CLABE number validation (18 digits) and SPEI support
openapi/components/schemas/common/PaymentInstructions.yaml Updated to include EUR and all new currency-specific payment account types in discriminator mapping
openapi/components/schemas/external_accounts/ExternalAccountInfoOneOf.yaml Migrated from account-type-specific naming to currency-specific schemas (USD, EUR, BRL, etc.)
.stainless/stainless.yml Updated external account models and payment account info references to match new currency-specific naming

Class Diagram

%%{init: {'theme': 'neutral'}}%%
classDiagram
    class BaseExternalAccountInfo {
        +accountType: ExternalAccountType
    }
    
    class CurrencyAccountInfo {
        +accountType: string
        +countries: string[]
        +paymentRails: string[]
    }
    
    class BaseBeneficiary {
        +beneficiaryType: string
    }
    
    class IndividualBeneficiary {
        +fullName: string
        +birthDate: string
        +nationality: string
        +email: string
        +address: Address
    }
    
    class BusinessBeneficiary {
        +legalName: string
        +registrationNumber: string
        +taxId: string
        +email: string
        +address: Address
    }
    
    class UsdAccountInfo {
        +accountNumber: string
        +routingNumber: string
    }
    
    class EurAccountInfo {
        +iban: string
        +swiftBic: string
    }
    
    class BrlAccountInfo {
        +pixKey: string
        +pixKeyType: string
        +taxId: string
    }
    
    class UsdExternalAccountInfo {
        +beneficiary: UsdBeneficiary | BusinessBeneficiary
    }
    
    class EurExternalAccountInfo {
        +beneficiary: EurBeneficiary | BusinessBeneficiary
    }
    
    BaseExternalAccountInfo <|-- UsdExternalAccountInfo
    BaseExternalAccountInfo <|-- EurExternalAccountInfo
    CurrencyAccountInfo <|-- UsdAccountInfo
    CurrencyAccountInfo <|-- EurAccountInfo
    CurrencyAccountInfo <|-- BrlAccountInfo
    UsdExternalAccountInfo --|> UsdAccountInfo
    EurExternalAccountInfo --|> EurAccountInfo
    BaseBeneficiary <|-- IndividualBeneficiary
    BaseBeneficiary <|-- BusinessBeneficiary
    UsdExternalAccountInfo --> IndividualBeneficiary
    UsdExternalAccountInfo --> BusinessBeneficiary
    EurExternalAccountInfo --> IndividualBeneficiary
    EurExternalAccountInfo --> BusinessBeneficiary
Loading

Last reviewed commit: c450d20

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

54 files reviewed, 7 comments

Edit Code Review Agent Settings | Greptile

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 17, 2026

Additional Comments (2)

openapi/paths/customers/customers_external_accounts.yaml
Stale example using removed account type

This example still uses accountType: US_ACCOUNT with accountCategory: CHECKING and bankName, but this PR removes US_ACCOUNT from the ExternalAccountType enum and replaces it with USD_ACCOUNT. The new UsdAccountInfo schema does not include accountCategory or bankName fields.

This example will now fail validation against the updated schema. It needs to be updated to use the new USD_ACCOUNT type and only include the fields defined in UsdAccountInfo (accountNumber, routingNumber).

                accountType: USD_ACCOUNT
                accountNumber: "12345678901"
                routingNumber: "123456789"
Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/paths/customers/customers_external_accounts.yaml
Line: 127:131

Comment:
**Stale example using removed account type**

This example still uses `accountType: US_ACCOUNT` with `accountCategory: CHECKING` and `bankName`, but this PR removes `US_ACCOUNT` from the `ExternalAccountType` enum and replaces it with `USD_ACCOUNT`. The new `UsdAccountInfo` schema does not include `accountCategory` or `bankName` fields.

This example will now fail validation against the updated schema. It needs to be updated to use the new `USD_ACCOUNT` type and only include the fields defined in `UsdAccountInfo` (`accountNumber`, `routingNumber`).

```suggestion
                accountType: USD_ACCOUNT
                accountNumber: "12345678901"
                routingNumber: "123456789"
```

How can I resolve this? If you propose a fix, please make it concise.

openapi/paths/platform/platform_external_accounts.yaml
Stale example using removed account type

Same issue as in customers_external_accounts.yaml: this example uses accountType: US_ACCOUNT with accountCategory: CHECKING and bankName, but US_ACCOUNT is no longer a valid ExternalAccountType value in this PR, and the new UsdAccountInfo schema does not include accountCategory or bankName.

                accountType: USD_ACCOUNT
                accountNumber: "12345678901"
                routingNumber: "123456789"
Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/paths/platform/platform_external_accounts.yaml
Line: 89:93

Comment:
**Stale example using removed account type**

Same issue as in `customers_external_accounts.yaml`: this example uses `accountType: US_ACCOUNT` with `accountCategory: CHECKING` and `bankName`, but `US_ACCOUNT` is no longer a valid `ExternalAccountType` value in this PR, and the new `UsdAccountInfo` schema does not include `accountCategory` or `bankName`.

```suggestion
                accountType: USD_ACCOUNT
                accountNumber: "12345678901"
                routingNumber: "123456789"
```

How can I resolve this? If you propose a fix, please make it concise.

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

82 files reviewed, 4 comments

Edit Code Review Agent Settings | Greptile

Comment on lines +26 to +30
type: string
description: The IBAN of the bank
swiftBic:
type: string
description: The SWIFT BIC of the bank
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing validation patterns and examples for IBAN and SWIFT BIC. Compare with GbpAccountInfo:27-36 which includes proper validation patterns, examples, and specific constraints (e.g., pattern: ^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$ for SWIFT code).

Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/components/schemas/common/DkkAccountInfo.yaml
Line: 26-30

Comment:
Missing validation patterns and examples for IBAN and SWIFT BIC. Compare with `GbpAccountInfo:27-36` which includes proper validation patterns, examples, and specific constraints (e.g., `pattern: ^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$` for SWIFT code).

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +26 to +30
type: string
description: The bank name of the bank
accountNumber:
type: string
description: The account number of the bank
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same redundant description issue as HkdAccountInfo - "bank name of the bank" and "account number of the bank". Also missing validation patterns and examples. Compare with NgnAccountInfo:26-34 which has precise descriptions, validation patterns, and examples.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/components/schemas/common/ThbAccountInfo.yaml
Line: 26-30

Comment:
Same redundant description issue as `HkdAccountInfo` - "bank name of the bank" and "account number of the bank". Also missing validation patterns and examples. Compare with `NgnAccountInfo:26-34` which has precise descriptions, validation patterns, and examples.

<sub>Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!</sub>

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +26 to +30
type: string
description: The bank name of the bank
accountNumber:
type: string
description: The account number of the bank
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing validation patterns and examples. Consider adding specific constraints if Vietnamese bank account numbers have a standard format.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/components/schemas/common/VndAccountInfo.yaml
Line: 26-30

Comment:
Missing validation patterns and examples. Consider adding specific constraints if Vietnamese bank account numbers have a standard format.

<sub>Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!</sub>

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +26 to +30
type: string
description: The bank name of the bank
accountNumber:
type: string
description: The account number of the bank
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Redundant descriptions and missing validation patterns. Same issues as ThbAccountInfo and VndAccountInfo.

Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/components/schemas/common/MyrAccountInfo.yaml
Line: 26-30

Comment:
Redundant descriptions and missing validation patterns. Same issues as `ThbAccountInfo` and `VndAccountInfo`.

How can I resolve this? If you propose a fix, please make it concise.

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

83 files reviewed, 5 comments

Edit Code Review Agent Settings | Greptile

Comment on lines +28 to +33
accountNumber:
type: string
description: The account number of the bank
routingNumber:
type: string
description: The routing number of the bank
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing validation patterns and examples. The original UsAccountInfo included:

  • routingNumber with minLength: 9, maxLength: 9, pattern: ^[0-9]{9}$, and example
  • accountNumber with example
  • More precise descriptions

Also, the required accountCategory field (CHECKING/SAVINGS) was removed - confirm this isn't a breaking change for existing integrations.

Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/components/schemas/common/UsdAccountInfo.yaml
Line: 28-33

Comment:
Missing validation patterns and examples. The original `UsAccountInfo` included:
- `routingNumber` with `minLength: 9`, `maxLength: 9`, `pattern: ^[0-9]{9}$`, and example
- `accountNumber` with example
- More precise descriptions

Also, the required `accountCategory` field (CHECKING/SAVINGS) was removed - confirm this isn't a breaking change for existing integrations.

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +25 to +27
sortCode:
type: string
description: The sort code of the bank
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sortCode is UK-specific banking terminology. Indonesian banks use "bank code" (kode bank) for routing. Rename to bankCode for accuracy.

Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/components/schemas/common/IdrAccountInfo.yaml
Line: 25-27

Comment:
`sortCode` is UK-specific banking terminology. Indonesian banks use "bank code" (kode bank) for routing. Rename to `bankCode` for accuracy.

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +26 to +34
pixKey:
type: string
description: The PIX key of the bank
pixKeyType:
type: string
description: The type of PIX key of the bank
taxId:
type: string
description: The tax ID of the bank account
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Descriptions incorrectly attribute account holder data to "the bank". PIX keys and tax IDs belong to the beneficiary/account holder, not the bank. Compare with GbpAccountInfo:27 which uses precise language like "UK bank sort code".

Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/components/schemas/common/BrlAccountInfo.yaml
Line: 26-34

Comment:
Descriptions incorrectly attribute account holder data to "the bank". PIX keys and tax IDs belong to the beneficiary/account holder, not the bank. Compare with `GbpAccountInfo:27` which uses precise language like "UK bank sort code".

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +25 to +30
bankName:
type: string
description: The bank name of the bank
accountNumber:
type: string
description: The account number of the bank
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Redundant descriptions: "bank name of the bank" and "account number of the bank". Use clearer phrasing like SgdAccountInfo:30 ("Name of the beneficiary's bank") and add validation patterns/examples.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/components/schemas/common/HkdAccountInfo.yaml
Line: 25-30

Comment:
Redundant descriptions: "bank name of the bank" and "account number of the bank". Use clearer phrasing like `SgdAccountInfo:30` ("Name of the beneficiary's bank") and add validation patterns/examples.

<sub>Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!</sub>

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +26 to +30
type: string
description: The IBAN of the bank
swiftBic:
type: string
description: The SWIFT BIC of the bank
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing validation patterns for IBAN and SWIFT BIC. Reference GbpAccountInfo:29 and SgdAccountInfo:33-38 which include proper patterns, length constraints, and examples.

Prompt To Fix With AI
This is a comment left during a code review.
Path: openapi/components/schemas/common/DkkAccountInfo.yaml
Line: 26-30

Comment:
Missing validation patterns for IBAN and SWIFT BIC. Reference `GbpAccountInfo:29` and `SgdAccountInfo:33-38` which include proper patterns, length constraints, and examples.

How can I resolve this? If you propose a fix, please make it concise.

AaryamanBhute and others added 7 commits February 22, 2026 18:39
Co-authored-by: Cursor <cursoragent@cursor.com>
Added beneficiary name verification fields to the External Account schema.

- Added a new `BeneficiaryVerificationStatus` enum with values: `MATCHED`, `PARTIAL_MATCH`, `NOT_MATCHED`, `UNSUPPORTED`, `CHECKED_BY_RECEIVING_FI`, and `PENDING`
- Added a new `VerifiedBeneficiaryData` object schema with a `fullName` property
- Extended the `ExternalAccount` schema to include:
  - `beneficiaryVerificationStatus` field to indicate the result of name verification
  - `beneficiaryVerifiedData` field to store verified account holder information

1. Create an external account with a beneficiary name
2. Verify that the API returns the appropriate verification status and verified data
3. Test each possible verification status to ensure proper handling

This change enables beneficiary name verification for external accounts, which helps prevent misdirected payments by confirming that the account holder name matches the expected beneficiary. This feature enhances security and reduces the risk of fraud or errors when sending payments to external accounts.
Co-authored-by: Cursor <cursoragent@cursor.com>
Update stale references to old payment-method-based schema names
(UsAccountExternalAccountInfo, PaymentClabeAccountInfo, etc.) and
remove BaseBeneficiary transform that no longer matches bundled output.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…truction schemas

Co-authored-by: Cursor <cursoragent@cursor.com>
@AaryamanBhute AaryamanBhute merged commit d75a856 into main Feb 23, 2026
8 checks passed
@AaryamanBhute AaryamanBhute deleted the changes-present branch February 23, 2026 21:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants