Skip to content

Comments

feat: add EUR account info, beneficiary, and external account schemas#216

Open
AaryamanBhute wants to merge 1 commit intochanges-presentfrom
add-eur-account-info
Open

feat: add EUR account info, beneficiary, and external account schemas#216
AaryamanBhute wants to merge 1 commit intochanges-presentfrom
add-eur-account-info

Conversation

@AaryamanBhute
Copy link
Contributor

Summary

  • Adds EurAccountInfo schema with IBAN (required), optional BIC, SEPA payment rail, and 19 Eurozone country codes
  • Adds EurBeneficiary schema for individual beneficiaries (matching existing currency patterns)
  • Adds EurExternalAccountInfo combining base external account info, EUR account info, and beneficiary (Individual/Business) discriminator
  • Adds PaymentEurAccountInfo with reference field (matching GBP/USD/CAD pattern)
  • Registers EUR_ACCOUNT in all discriminators and enums: ExternalAccountType, PaymentAccountType, ExternalAccountInfoOneOf, BaseExternalAccountInfo, BasePaymentAccountInfo, and PaymentInstructions

Test plan

  • make build passes — OpenAPI spec bundles successfully
  • make lint passes — Redocly validation and Mintlify openapi-check both clean
  • Verify EUR account creation works end-to-end via API once backend support is added

Made with Cursor

Add SEPA/EUR support with IBAN and optional BIC fields, covering
Eurozone countries. Registers EUR_ACCOUNT across all discriminators,
payment instructions, and external account types.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions
Copy link

github-actions bot commented Feb 20, 2026

✱ Stainless preview builds

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

kotlin

feat(api): add EurAccount to ExternalAccountInfoOneOf and PaymentInstructions

openapi

feat(api): add EUR account support to payment and external accounts

python

feat(api): add EUR account type to customers and payment_instructions

typescript

feat(api): add EUR account types to external-accounts and quotes

Edit this comment to update them. They will appear in their respective SDK's changelogs.

grid-python studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ✅test ✅

pip install https://pkg.stainless.com/s/grid-python/9708af198eaa8a6fedff315afc2ff02af9bcd775/grid-0.0.1-py3-none-any.whl
New diagnostics (4 note)
💡 Schema/RequiredPropertyNotDefined: This schema marks `accountType` as `required`, but it isn't defined in `properties`, so it will be ignored.
💡 Schema/RequiredPropertyNotDefined: This schema marks `accountType` as `required`, but it isn't defined in `properties`, so it will be ignored.
💡 Model/Recommended: `#/components/schemas/EurExternalAccountInfo` could potentially be defined as a [model](https://www.stainless.com/docs/guides/configure#models) within `#/resources/customers/subresources/external_accounts`.
💡 Model/Recommended: `#/components/schemas/EurBeneficiary` could potentially be defined as a [model](https://www.stainless.com/docs/guides/configure#models) within `#/resources/customers/subresources/external_accounts`.
grid-kotlin studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ✅test ✅

New diagnostics (7 note)
💡 Schema/RequiredPropertyNotDefined: This schema marks `accountType` as `required`, but it isn't defined in `properties`, so it will be ignored.
💡 Schema/RequiredPropertyNotDefined: This schema marks `accountType` as `required`, but it isn't defined in `properties`, so it will be ignored.
💡 Schema/EnumHasOneMember: This enum schema has just one member, so it could be defined using [`const`](https://json-schema.org/understanding-json-schema/reference/const).
💡 Schema/EnumHasOneMember: This enum schema has just one member, so it could be defined using [`const`](https://json-schema.org/understanding-json-schema/reference/const).
💡 Schema/EnumHasOneMember: This enum schema has just one member, so it could be defined using [`const`](https://json-schema.org/understanding-json-schema/reference/const).
💡 Schema/EnumHasOneMember: This enum schema has just one member, so it could be defined using [`const`](https://json-schema.org/understanding-json-schema/reference/const).
💡 Schema/EnumHasOneMember: This enum schema has just one member, so it could be defined using [`const`](https://json-schema.org/understanding-json-schema/reference/const).
grid-typescript studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ✅test ✅

npm install https://pkg.stainless.com/s/grid-typescript/492973f57fc37694f02dccc4b39421fbd165c73b/dist.tar.gz
New diagnostics (4 note)
💡 Schema/RequiredPropertyNotDefined: This schema marks `accountType` as `required`, but it isn't defined in `properties`, so it will be ignored.
💡 Schema/RequiredPropertyNotDefined: This schema marks `accountType` as `required`, but it isn't defined in `properties`, so it will be ignored.
💡 Model/Recommended: `#/components/schemas/EurExternalAccountInfo` could potentially be defined as a [model](https://www.stainless.com/docs/guides/configure#models) within `#/resources/customers/subresources/external_accounts`.
💡 Model/Recommended: `#/components/schemas/EurBeneficiary` could potentially be defined as a [model](https://www.stainless.com/docs/guides/configure#models) within `#/resources/customers/subresources/external_accounts`.
grid-openapi studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅

New diagnostics (4 note)
💡 Schema/RequiredPropertyNotDefined: This schema marks `accountType` as `required`, but it isn't defined in `properties`, so it will be ignored.
💡 Schema/RequiredPropertyNotDefined: This schema marks `accountType` as `required`, but it isn't defined in `properties`, so it will be ignored.
💡 Model/Recommended: `#/components/schemas/EurExternalAccountInfo` could potentially be defined as a [model](https://www.stainless.com/docs/guides/configure#models) within `#/resources/customers/subresources/external_accounts`.
💡 Model/Recommended: `#/components/schemas/EurBeneficiary` could potentially be defined as a [model](https://www.stainless.com/docs/guides/configure#models) within `#/resources/customers/subresources/external_accounts`.

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-20 22:11:13 UTC

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 20, 2026

Greptile Summary

This PR adds comprehensive EUR account support to the OpenAPI specification, following the established patterns used for GBP, USD, and CAD accounts. The implementation includes EurAccountInfo with IBAN (required) and BIC (optional) fields using proper validation patterns, SEPA payment rail, and all 19 Eurozone country codes (AT, BE, CY, EE, FI, FR, DE, GR, IE, IT, LV, LT, LU, MT, NL, PT, SK, SI, ES). The schemas are properly registered across all discriminator mappings and enums.

Key changes:

  • Created EurAccountInfo with IBAN/BIC validation patterns matching international standards
  • Created EurBeneficiary for individual beneficiaries (identical structure to GbpBeneficiary)
  • Created EurExternalAccountInfo combining base info, account info, and beneficiary discriminator (Individual/Business)
  • Created PaymentEurAccountInfo with reference field (matching GBP/USD/CAD pattern)
  • Registered EUR_ACCOUNT in all required locations: ExternalAccountType, PaymentAccountType, ExternalAccountInfoOneOf, BaseExternalAccountInfo, BasePaymentAccountInfo, and PaymentInstructions
  • Updated bundled openapi.yaml and mintlify/openapi.yaml files

The implementation is clean, consistent, and follows the repository's established conventions for adding currency-specific account schemas.

Confidence Score: 5/5

  • This PR is safe to merge - it's a well-structured schema addition with no logic changes
  • The PR receives a perfect score because it follows existing patterns exactly, uses proper validation patterns for IBAN and BIC, includes all required discriminator registrations, maintains alphabetical ordering in enums, and contains no logic or runtime code. The author confirmed make build and make lint both pass, indicating the schemas are valid and properly bundled.
  • No files require special attention - all changes follow established patterns and conventions

Important Files Changed

Filename Overview
openapi/components/schemas/common/EurAccountInfo.yaml New EUR account schema with IBAN/BIC fields, SEPA rail, and 19 Eurozone countries - follows existing patterns
openapi/components/schemas/common/EurBeneficiary.yaml EUR individual beneficiary schema - identical structure to GbpBeneficiary, consistent with existing patterns
openapi/components/schemas/external_accounts/EurExternalAccountInfo.yaml EUR external account combining base info, account info, and beneficiary discriminator - matches GBP pattern
openapi/components/schemas/common/PaymentEurAccountInfo.yaml EUR payment account with reference field - consistent with GBP/CAD/USD patterns
openapi/components/schemas/external_accounts/ExternalAccountType.yaml Added EUR_ACCOUNT to external account type enum - alphabetically ordered
openapi/components/schemas/common/PaymentAccountType.yaml Added EUR_ACCOUNT to payment account type enum - alphabetically ordered

Entity Relationship Diagram

%%{init: {'theme': 'neutral'}}%%
erDiagram
    EurAccountInfo {
        string accountType "EUR_ACCOUNT"
        array countries "19 Eurozone countries"
        array paymentRails "SEPA"
        string iban "Required - pattern validated"
        string bic "Optional - SWIFT code"
    }
    
    EurBeneficiary {
        string beneficiaryType "INDIVIDUAL"
        string fullName "Required"
        string birthDate "Optional"
        string nationality "Optional"
        string email "Optional"
        string phoneNumber "Optional"
        string registrationNumber "Optional"
        string countryOfResidence "Optional"
        object address "Optional"
    }
    
    BusinessBeneficiary {
        string beneficiaryType "BUSINESS"
        string legalName "Required"
        string registrationNumber "Optional"
        string taxId "Optional"
        string email "Optional"
        string phoneNumber "Optional"
        string countryOfResidence "Optional"
        object address "Optional"
    }
    
    EurExternalAccountInfo {
        string accountType "Inherited"
        object beneficiary "Required"
    }
    
    PaymentEurAccountInfo {
        string accountType "Inherited"
        string reference "Required - UMA reference code"
    }
    
    BaseExternalAccountInfo ||--|| EurExternalAccountInfo : extends
    EurAccountInfo ||--|| EurExternalAccountInfo : extends
    EurExternalAccountInfo ||--o{ EurBeneficiary : "beneficiary (oneOf)"
    EurExternalAccountInfo ||--o{ BusinessBeneficiary : "beneficiary (oneOf)"
    
    BasePaymentAccountInfo ||--|| PaymentEurAccountInfo : extends
    EurAccountInfo ||--|| PaymentEurAccountInfo : extends
Loading

Last reviewed commit: 3d3b5da

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant