Skip to content

Add INR bank (NEFT/RTGS) fields to the INR account schema#646

Open
mohamedwane wants to merge 2 commits into
mainfrom
claude/inr-neft-rtgs-schema-02tv55
Open

Add INR bank (NEFT/RTGS) fields to the INR account schema#646
mohamedwane wants to merge 2 commits into
mainfrom
claude/inr-neft-rtgs-schema-02tv55

Conversation

@mohamedwane

Copy link
Copy Markdown
Contributor

INR external accounts were UPI-only (vpa). This adds the bank-rail fields so a NEFT/RTGS beneficiary can be represented: InrAccountInfoBase gains accountNumber, ifsc, rail, bankName (accountType is the only unconditional required field; required set is rail-dependent — NEFT/RTGS need accountNumber + ifsc + rail, UPI needs vpa), and InrAccountInfo allows NEFT/RTGS in paymentRails. Mirrors the shape sparkcore already generates in scripts/grid/generated_common/InrAccountInfoBase.yaml for the M2 non-instant INR corridor.

Follow-ups (not in this PR): regenerate the sparkcore grid-api client from this spec (grid-api/update_schema.sh), then wire the sparkcore server side to persist/serialize the bank fields in destination_details.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VJZdGCz7aSRNSHcBEdweyD


Generated by Claude Code

@vercel

vercel Bot commented Jul 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

2 Skipped Deployments
Project Deployment Actions Updated (UTC)
grid-flow-builder Ignored Ignored Preview Jul 6, 2026 9:46pm
grid-wallet-demo Ignored Ignored Preview Jul 6, 2026 9:46pm

Request Review

@github-actions github-actions Bot added the breaking-change Introduces a breaking change to the OpenAPI spec label Jul 6, 2026
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

⚠️ Breaking OpenAPI changes detected

This PR introduces breaking changes to openapi.yaml:

API Changelog 2026-06-29 vs. 2026-06-29

API Changes

GET /agents/approvals

  • ⚠️ the response property data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ the response property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new NEFT enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /agents/me/actions

  • ⚠️ the response property data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ the response property data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new NEFT enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /agents/me/actions/{actionId}

  • ⚠️ the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new NEFT enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /agents/me/external-accounts

  • ⚠️ the response property data/items/allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /agents/me/external-accounts

  • ⚠️ the response property allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ added the new NEFT enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201

GET /agents/me/external-accounts/{externalAccountId}

  • ⚠️ the response property allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /agents/me/internal-accounts

  • ⚠️ the response property data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /agents/me/quotes

  • ⚠️ the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ added the new NEFT enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201

GET /agents/me/quotes/{quoteId}

  • ⚠️ the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /agents/me/quotes/{quoteId}/execute

  • ⚠️ the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new NEFT enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /agents/me/transactions

  • ⚠️ the response property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /agents/me/transactions/{transactionId}

  • ⚠️ the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /agents/me/transfer-in

  • ⚠️ the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ added the new NEFT enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new NEFT enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201

POST /agents/me/transfer-out

  • ⚠️ the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ added the new NEFT enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new NEFT enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201

POST /agents/{agentId}/actions/{actionId}/approve

  • ⚠️ the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new NEFT enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /agents/{agentId}/actions/{actionId}/reject

  • ⚠️ the response property quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ the response property transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new NEFT enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the quote/allOf[#/components/schemas/Quote]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the transaction/allOf[#/components/schemas/TransactionOneOf]/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /customers/external-accounts

  • ⚠️ the response property data/items/allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /customers/external-accounts

  • ⚠️ the response property allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ added the new NEFT enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201

GET /customers/external-accounts/{externalAccountId}

  • ⚠️ the response property allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /customers/internal-accounts

  • ⚠️ the response property data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

PATCH /internal-accounts/{id}

  • ⚠️ the response property fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /platform/external-accounts

  • ⚠️ the response property data/items/allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /platform/external-accounts

  • ⚠️ the response property allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ added the new NEFT enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201

GET /platform/external-accounts/{externalAccountId}

  • ⚠️ the response property allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the allOf[subschema #1]/accountInfo/oneOf[subschema #16: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /platform/internal-accounts

  • ⚠️ the response property data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /quotes

  • ⚠️ the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ added the new NEFT enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201

GET /quotes/{quoteId}

  • ⚠️ the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /quotes/{quoteId}/execute

  • ⚠️ the response property paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /sandbox/internal-accounts/{accountId}/fund

  • ⚠️ the response property fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the fundingPaymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /sandbox/send

  • ⚠️ the response property allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /transactions

  • ⚠️ the response property data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the data/items/oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

GET /transactions/{transactionId}

  • ⚠️ the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /transactions/{transactionId}/confirm

  • ⚠️ the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 200
  • ⚠️ added the new NEFT enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200
  • ⚠️ added the new RTGS enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 200

POST /transfer-in

  • ⚠️ the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ added the new NEFT enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201

POST /transfer-out

  • ⚠️ the response property oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[#/components/schemas/InrAccountInfoBase]/vpa became optional for the status 201
  • ⚠️ added the new NEFT enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201
  • ⚠️ added the new RTGS enum value to the oneOf[subschema #2: Outgoing Transaction]/allOf[subschema #2]/paymentInstructions/items/accountOrWalletInfo/oneOf[subschema #6: INR Account]/allOf[#/components/schemas/InrAccountInfo]/allOf[subschema #2]/paymentRails/items/ response property for the response status 201

Detected by oasdiff. This PR will need approval from an API reviewer before merge.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

✱ Stainless preview builds for grid

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

cli

chore(internal): regenerate SDK with no functional changes

csharp

feat(api): add account/bank fields to INR models, make vpa optional, add NEFT/RTGS rails

go

feat(api): add accountNumber/bankName/ifsc/rail, make vpa optional in INR account create

kotlin

feat(api): add accountNumber/bankName/ifsc/rail fields, NEFT/RTGS rails to INR accounts

openapi

feat(api): add accountNumber/ifsc/rail/bankName fields and NEFT/RTGS rails to InrAccountInfo

php

feat(api): add NEFT/RTGS payment rails and bank account fields to INR account models

python

feat(api): add account_number/ifsc/rail/bank_name, make vpa optional in INR external account

ruby

feat(api): add NEFT/RTGS payment rails and fields to INR account models

typescript

feat(api): add NEFT/RTGS payment rails and bank transfer fields to INR external accounts

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

grid-cli studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️build ❗lint ❗test ❗

grid-openapi studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️

grid-kotlin studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️build ✅ (prev: build ⏭️) → lint ✅ (prev: lint ⏭️) → test ❗

grid-go studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅ (prev: build ⏭️) → lint ❗test ❗

go get github.com/stainless-sdks/grid-go@b298fb8763fb4bb1f95e5fe039f3740766429aea
⚠️ grid-typescript studio · code · diff

Your SDK build had a failure in the lint CI job, which is a regression from the base state.
generate ✅build ✅ (prev: build ⏭️) → lint ❗ (prev: lint ⏭️) → test ✅

npm install https://pkg.stainless.com/s/grid-typescript/78b4b1c8325a4a7e8befc71d26ee03e3d8295047/dist.tar.gz
grid-ruby studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅ (prev: build ⏭️) → lint ✅test ✅

⚠️ grid-python studio · code · diff

Your SDK build had a failure in the lint CI job, which is a regression from the base state.
generate ✅build ✅ (prev: build ⏭️) → lint ❗ (prev: lint ⏭️) → test ❗

pip install https://pkg.stainless.com/s/grid-python/7dbf947d6d41eedb1845221bbea6f8f5fd741a2a/grid-0.0.1-py3-none-any.whl
grid-php studio · code · diff

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

⚠️ grid-csharp studio · code · diff

Your SDK build had a failure in the build CI job, which is a regression from the base state.
generate ⚠️build ❗ (prev: build ⏭️) → lint ✅ (prev: lint ⏭️) → test ❗


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-07-06 21:50:35 UTC

@greptile-apps

greptile-apps Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR extends InrAccountInfoBase to support NEFT and RTGS bank rails alongside the existing UPI rail, mirroring the shape sparkcore already generates in its InrAccountInfoBase fragment. Rail-conditional validation (accountNumber, ifsc, rail for NEFT/RTGS; vpa for UPI) is intentionally enforced server-side rather than in the schema, matching the established design pattern.

  • InrAccountInfoBase gains four new optional properties — accountNumber, ifsc (with correct 11-char IFSC pattern ^[A-Z]{4}0[A-Z0-9]{6}$), rail, and bankName — and moves vpa out of required, replacing it with a prose description of rail-dependent requirements.
  • InrAccountInfo.paymentRails enum is extended with NEFT and RTGS, and both openapi.yaml and mintlify/openapi.yaml are kept in sync with the source component files.

Confidence Score: 5/5

Safe to merge — purely additive schema change with no breaking modifications to existing fields or required sets.

All changes are additive: new properties are optional, the existing accountType required constraint is preserved, IFSC and account-number patterns are correct, and all three copies of the spec (source component YAML, openapi.yaml, mintlify/openapi.yaml) are kept in sync. No logic, routing, or persistence is touched in this PR.

No files require special attention. The only nit is the merged example in InrAccountInfoBase.yaml combining UPI and NEFT fields, which could be split into named examples for clarity.

Important Files Changed

Filename Overview
openapi/components/schemas/common/InrAccountInfoBase.yaml Removes vpa from required, adds description of rail-dependent validation, and introduces accountNumber, ifsc, rail, and bankName properties with appropriate patterns/constraints. Example mixes UPI and NEFT fields together.
openapi/components/schemas/common/InrAccountInfo.yaml Adds NEFT and RTGS to the paymentRails enum; clean, minimal, and consistent with the base schema changes.
openapi.yaml Compiled/flattened copy reflecting the same InrAccountInfoBase and InrAccountInfo changes; stays in sync with source component files.
mintlify/openapi.yaml Mintlify docs copy with identical INR schema additions; consistent with openapi.yaml.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[INR Account Create Request] --> B{accountType: INR_ACCOUNT}
    B --> C{rail?}
    C -->|NEFT / RTGS| D[Required: accountNumber + ifsc + rail]
    C -->|UPI| E[Required: vpa]
    C -->|absent / other| F[Server-side validation rejects]
    D --> G[Optional: bankName]
    E --> H[paymentRails enum: UPI / NEFT / RTGS]
    G --> H
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[INR Account Create Request] --> B{accountType: INR_ACCOUNT}
    B --> C{rail?}
    C -->|NEFT / RTGS| D[Required: accountNumber + ifsc + rail]
    C -->|UPI| E[Required: vpa]
    C -->|absent / other| F[Server-side validation rejects]
    D --> G[Optional: bankName]
    E --> H[paymentRails enum: UPI / NEFT / RTGS]
    G --> H
Loading

Reviews (2): Last reviewed commit: "Add INR bank (NEFT/RTGS) fields to the I..." | Re-trigger Greptile

Comment on lines 2 to +10
required:
- accountType
- vpa
description: 'Required fields depend on the selected paymentRails:

- NEFT: accountNumber, ifsc, rail

- RTGS: accountNumber, ifsc, rail

- UPI: vpa'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 Conditional Fields Stay Optional

When an INR external account create request uses this base schema, only accountType is required. A payload with accountType: INR_ACCOUNT and missing vpa, or with partial bank details such as accountNumber without ifsc and rail, can pass schema validation even though no supported INR rail has enough destination data to route a payout.

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

Comment:
**Conditional Fields Stay Optional**

When an INR external account create request uses this base schema, only `accountType` is required. A payload with `accountType: INR_ACCOUNT` and missing `vpa`, or with partial bank details such as `accountNumber` without `ifsc` and `rail`, can pass schema validation even though no supported INR rail has enough destination data to route a payout.

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

Comment on lines +38 to +44
rail:
type: string
description: The payment rail to route the payout over, for currencies that support
more than one (e.g. NEFT or RTGS for INR).
example: NEFT
minLength: 1
maxLength: 32

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 Rail Accepts Unsupported Values

The create-time rail selector is a free-form string while the INR response schema only advertises UPI, NEFT, and RTGS. A create payload with rail: "IMPS" or rail: "NEFTT" can pass OpenAPI validation and leave the account with a routing value that downstream payout logic cannot match to a supported INR rail.

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

Comment:
**Rail Accepts Unsupported Values**

The create-time `rail` selector is a free-form string while the INR response schema only advertises `UPI`, `NEFT`, and `RTGS`. A create payload with `rail: "IMPS"` or `rail: "NEFTT"` can pass OpenAPI validation and leave the account with a routing value that downstream payout logic cannot match to a supported INR rail.

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

Copy link
Copy Markdown
Contributor Author

Re: the two Greptile findings — both are intentional in this PR:

  1. Rail-dependent required fields as description text, not schema rules. This mirrors the shape sparkcore already generates (scripts/grid/generated_common/InrAccountInfoBase.yaml), which this spec must stay in sync with for client regeneration. The rail-conditional validation (NEFT/RTGS → accountNumber + ifsc + rail; UPI → vpa) is enforced server-side; encoding it as oneOf variants here would diverge from the generated fragment and churn every SDK's type shape.

  2. rail as a free-form string rather than an enum. Also matches the sparkcore fragment — it's deliberately generic ("for currencies that support more than one") so new rails can be added without a breaking enum change; unsupported values are rejected server-side. The paymentRails enum on InrAccountInfo is what advertises the supported set.


Generated by Claude Code

Copy link
Copy Markdown
Contributor Author

Status of the failing preview check: the only gating issue is the generated C# SDK's build job, which regresses from base with this schema change. It reproduced identically on a re-run, so it's deterministic, not a flake. The compile error is visible in Stainless Studio (C#) / the grid-csharp preview CI. TypeScript and Python also show lint-stage regressions but those don't fail the check; Go, Ruby, Kotlin, PHP, and OpenAPI are clean, and the CLI failures are pre-existing.

The likely fix is Stainless-side (codegen/config) rather than a spec change — the schema intentionally mirrors sparkcore's generated InrAccountInfoBase fragment. If the C# compile error suggests a benign spec-side tweak instead, happy to apply it.


Generated by Claude Code

Copy link
Copy Markdown
Contributor Author

@greptileai please re-review — the two earlier findings (rail-conditional required fields expressed as description text, and rail as a free-form string) are intentional design choices mirroring sparkcore's generated InrAccountInfoBase fragment, with validation enforced server-side. See #646 (comment) for the full rationale.


Generated by Claude Code

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ls-bolt

ls-bolt Bot commented Jul 6, 2026

Copy link
Copy Markdown

Why the Build SDKs for pull request / preview check is red

Investigated via a bisect on throwaway PR #650this failure is not caused by this PR's content.

The failing language is csharp (Your SDK build had a failure in the build CI job, which is a regression from the base state). Bisect results:

Test csharp
This PR's full change (2 runs)
Full change minus rail property
Only NEFT/RTGS enum values (2-line diff; same shape as EUR's SEPA, SEPA_INSTANT)
info.description one-word tweak (no generated-code delta → cached build)
GTQ bankName description-only change (doc-comment-only codegen delta)

Conclusion: any grid-api change that regenerates csharp code currently fails Stainless's csharp build CI, content-independent. The window opened between Jul 3 09:10 UTC (#642 passed with a codegen delta) and Jul 6 18:34 UTC (#644, same failure). Auto-sync #644 is red for the same reason.

The csharp target is unpublished (production_repo: null, publish.nuget: false), so nothing shipping is affected. All real spec gates here (Lint, Breaking Changes, OpenAPI docs build) are green. Precedent: #633 and #637 merged through this same red check.

The underlying csharp error is only visible in Stainless Studio (org lightspark, project grid) — needs someone with access there, or Stainless support.


🤖 bonded-titan(#1) | Feedback

Copy link
Copy Markdown
Contributor Author

This PR is now superseded by #644 ("chore: Sync account schemas"), which merged to main with the identical INR schema content: InrAccountInfoBase.yaml and InrAccountInfo.yaml on main are byte-identical to this branch. A local test-merge of this branch into current main (d365c9c) completes cleanly with an empty resulting diff — merging this PR would be a no-op.

Recommend closing as superseded. The follow-ups from the description (regenerate the sparkcore grid-api client via grid-api/update_schema.sh, then wire destination_details persistence server-side) are unblocked, since the spec change is already live on main.


Generated by Claude Code

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

Labels

breaking-change Introduces a breaking change to the OpenAPI spec

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants